物联网/嵌入式工程师
重磅升级:新增硬件电路设计与实战,让你软硬通吃,同级PK无敌!行业风口、政策倾斜,新晋热门高薪不内卷!0基础一站式就业完整路径,抢占先发优势!
C++ 中的 const 千变万化,之前我们已经学过使用 const 来做一个常量。const 在 C++ 中整体表示的语意是“不变的”,但是 const 申明在不同位置,却会有不一样的效果。这一小节,我们来集中学习一下 const。
例如:
const int a = 20;
则表示 a 是一个常量,你不可以在后续对其进行修改。因为 a 不可修改,所以在创建的时候就要对 a 进行赋值,不对其进行赋值则会报错。例如,下面的代码就会报错
const int a;
const 修饰指针可以分为多种情况:
int aaa = 20; int bbb = 30; const int * constPoint = &aaa; constPoint = &bbb; *constPoint = 80; // 这行代码会报错
int aaa = 20; int bbb = 30; int * const constPoint = &aaa; constPoint = &bbb; // 这行代码会报错 *constPoint = 80;
int aaa = 20; int bbb = 30; const int * const constPoint = &aaa; constPoint = &bbb; // 这行代码会报错 *constPoint = 80; // 这行代码会报错
const 修饰函数参数和修饰普通函数是一样的。但是要注意的时候 const 修饰函数参数的时候,其作用域仅仅限制在函数内部。也就是说,你可以把一个不用 const 修饰的参数传入到 const 修饰的参数中去。而只要在函数中保持其不变性就可以了。
class A { public: int aaa; int funcA() const { aaa = 20; // 这行代码会报错 return 0; } }
class A { public: int aaa; int funcA() const { funcB(); // 这行代码会报错 return 0; } int funcB() { return 0; } }
修饰返回值要分成两种情况
在 C++ 中有时我们会写这样的代码:
A aaa; A & getA(){ return aaa; } int main(int argc,char **argv) { A bbb; getA() = bbb; return 0; }
上面的代码运行之后,aaa 变量就会被 bbb 所赋值,但是有些时候这样做会造成一些混乱
例如:
getA() == a
有时候会有笔误:
getA() = a
这种情况下,就会有问题,而且不容易被找到这个错误。
所以在大多数情况下,我们可以给返回值加一个 const ,这样可以防止返回值被调用。
A aaa; const A & getA(){ return aaa; } int main(int argc,char **argv) { A bbb; getA() = bbb; // 这行代码会报错 return 0; }
值传递就简单多了,因为值传递的时候,返回值会被复制一份,所以加不加 const 都可以。
请验证,完成请求
由于请求次数过多,请先验证,完成再次请求
打开微信扫码自动绑定
绑定后可得到
使用 Ctrl+D 可将课程添加到书签
举报