C++ const用法及注意事项
作者:网络转载 发布时间:[ 2014/3/11 14:27:57 ] 推荐标签:c++ 变量 常量
effective c++ 条款03讲到:Use const whenever possible 由此可见const 限定符对于c++的重要性。下面尽可能全面的总结const 的用法和技巧。主要资料来源于c++ primer,标题后的页码为c++ primer 中文版(第四版)的页码。
(一) const限定符(p49)
定义const对象时要初始化
除非特别说明,在全局作用域声明的const变量是定义该对象为文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问
通过制定const变量为extern ,可以在其他文件中访问const对象 (extern const int bufsize = 1)
(二)const引用(p51)
const引用是指向const对象的引用,不能将非const引用绑定到const对象,但可以将const引用绑定到非const对象。const引用可以初始化为不同类型的对象或者初始化为右值。
(三)const变量在头文件中的使用(p59)
如果const变量是用常量表达式初始化的,那么将它放在头文件中。反之,则放在源文件中。
(四)const和指针(p110)
1.指向const对象的指针
指向const对象的指针必须具有const特性(const double *ptr),ptr本身不是const,在定义时不需要初始化,可以允许给ptr重新赋值,但是不能通过ptr修改其所指对象的值
不能使用void *保存const对象的地址,而必须使用const void*
允许把非const对象的地址赋给指向const对象的指针,但同样不能使用指针修改对象的值。
2.const指针
const指针必须在定义时初始化,可以通过指针修改对象的值。
3.指向const对象的const指针
const double pi = 3;
const double *const pi_ptr = π
既不能修改pt_ptr所指向对象的值,也不能修改指针的指向。
4.const形参(p200)
如果函数参数是非引用的非const形参,则既可给该函数传递const实参也可以传递非const的实参。
如果函数形参定义为非引用的const类型,则既可以传递const对象也可以传递非const对象。在函数中不可以改变实参的局 部副本
5.指向const对象的指针形参和指向非const对象的指针形参(p200)
当函数形参为指向const对象的指针(const int *)时,可以使用指向const对象的指针(const int *)作为实参也可以使用指向非 const对象的指针(int *)既普通指针初始化形参
当函数形参为指向非const对象的指针(int *) 时,则只能将指向非const对象的指针(int *)传递给函数,而不能将指向const 对象的指针传递给函数。
(五) const引用做形参(p205)
应该将不需要修改的引用形参定义为const引用。普通的非const引用形参在使用时不太灵活。这样的形参既不能使用const对象初始化,也不能使用字面值或产生右值的表达式初始化
(六)重载和const形参(p235)
可基于函数的引用形参是指向const对象还是指向非const对象,实现函数重载。将引用形参定义为const来重载函数是合法的。
Record lookup(Account&);
Record lookup( const Account &); //new function
注意不能基于指针本身是否为const来实现函数的重载:
f(int *)
f(int * const) // redeclaration
(七)const成员函数
const成员函数不能修改调用该函数的对象。
const 对象、指向const对象的指针或引用只能用于调用其const成员函数,如果尝试用它们调用非const成员函数,则是错误的
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11