-
值替代
头文件里的const const 是编译属性 c++中const默认为内部连接。当定义时,必须赋值。一般const常量没有存储空间。但是 extern 修饰的const会强制进行存储空间分配。(取const地址也要存储空间分配) const安全性 如果运行期间产生的值初始化一个变量,而且知道在变量的生命周期是不变的,则用const限定该变量。 const可以用于聚合,然而不能在编译期间使用它的值,因为编译器在编译期间不需要知道存储的内容。 const int i[] = {1,2,3,4}; // float f(i[3]); // illegal 与c语言区别 c默认const是外部链接,总是要创建一块内存空间。 c++默认const内部连接,创建空间与否依赖于对它如何使用。为了使const成为外部连接,必须明确把它定义成extern。 extern const int x = 1; 为什么c++要求一个const定义时必须初始化: 初始化把定义和声明区别开来。
-
指针
指向const的指针 const int* u; // u是一个指针,它指向一个const int。 const指针 使指针本身成为const指针,必须把const 放在*的右边。 Int d =1; Int * const w=&d; // w 是一个指针,它是指向int的const指针。 赋值个类型检查 不能把const对象的地址赋给一个非const指针,当然,总能用强制类型转换进行这样的赋值,但是,这是一个不好的习惯。 char* cp =“Boston”;//error, 因为字符数组的字面值被编译器作为一个常量字符数组建立的。 如果想修改字符串,把它放数组中: char cp[] = "Boston";
-
函数参数和返回值
传const值: 一般可在函数内用const限定,可以用指针来实现,更好用“引用” 返回const值:对于内建类型应该去掉const,从而不混淆客户程序员; 对于自定义类型,表明返回的值不能是一个左值(不能被赋值,也不能被修改) 临时量自动成为const,这样当程序员犯错误时,会发出警告。 传递和返回地址: 如果传递或者返回一个地址(ptr or ref),客户程序员去取地址并修改其初值是可能的。 如果使地址成为const,可以阻止此类事的发生。 Alias: 由于引用的语法,可把一个临时对象传递给一个受const引用的函数,但是不能把一个临时对象传递给接受指针的函数--对于指针,它必须明确接收地址。所以一个总是const的临时变量,它的地址可以被传递给一个函数。 这也就是为什么当临时变量按引用传递给一个函数时,这个函数的参数必须是const引用的原因。
-
类
类内局部const: 在这个对象生命周期内,它是一个常量。在ctr list里面为之初始化。 编译期间类常量: static const: 必须在定义的地方初始化。在该类的所有对象中它都一样。 旧版本中用enum hack(无标记的enum) class Bunch { enum{size =100}; // static const int size = 100; Int i[size]; } 整个对象作为const: 引入const成员函数,只能对于const对象调用 用户定义类型和内建类型一样,都可以定义一个const对象 可变的: Bitwise: 每个字节是固定的。 Memberwise:整个对象从概念上讲是不变的,但是可以以成员为单位改变。 当编译器被告知一个对象是const对象时,它将绝对保护这个对象按位的常量性。 当某个对象是const对象时,就指定了应该按位const,但我们可以用某种方法使之改变成按逻辑const 方法一被称为“强制转换常量性”const_cast 方法二是 使用关键字mutable,以指定一个特定的数据成员可以在一个const对象中改变。
-
volatile
其告诉编译器不要擅自作出有关该数据的任何假设,优化期间尤其如此。
C++编程思想-常量
最新推荐文章于 2025-05-12 11:47:17 发布