c++-笔记二

一、全局范围的const使用

1、const的使用有两种效果,一是生成编译期常量,二是运行期常量。 做为编译期常量主要用作值替代,即取代C中的#define常量定义,一般用于设置数组大小。 此时不分配存储空间,只在有extern限定或取地址时才会分配空间。 做为运行期常量主要控制程序的安全性,它们会被分配空间,但一经初始化就不能再改变, 数组,结构等集合始终是运行期常量,不能当做编译期常量使用,例如不能用于设置数组大小。 另外C中的const只是运行期常量。

2、const对指针的使用 指向const的指针 const int* x,int const* x; const指针 int* const x; 注意:关于赋值,不能把const指针(引用)赋给非const指针(引用)(会通过非const指针改 变const指针指向的值!),但可以把非const指针(引用)赋给const指针(引用)。这是基于 安全的考虑。

3、const用于函数参数与返回值 参数做为const值一般作为函数中的一个初始值;但一般如下使用更易理解: void f(int ic) { const int& i=ic; //others } 参数做为const指针或引用是基于安全与效率的原因;并且一般不改变参数的函数,参数要用 const int* cip或const int& ci;这样的函数可const和非const参数,若函数参数没有const 修饰则只能接受非const参数,不能接受const参数,不具有通用性,所以记住如下用法: void f(const int& ic) {} 注意:所有临时变量都是常量; 返回值做为const值时表明此返回值不能做为左值或修改,一般用于用户自定义类,对于内部 数据无意义。 返回值做为const指针时要注意接受返回值的变量要为const所修饰。 二、类内部的const使用

1、类内部const的含义-它在每个类对象里分配存储空间,且一旦初始化后就不能改变(运行期常
量),它要在构造函数的初始化表中初始化。
2、要想在类内部使用编译期常量,可以使用enum枚举;它不会占用存储空间。
3、const用于成员函数-表明此类函数不会改变对象的数据,能被const对象所调用(const对象只
能调用const成员函数)但若想在const成员函数中改变数据,有两种方法:
1>通过this指针把const变量强制转换为非const的。
2>用mutable修饰要改变的变量。
推荐使用2>。

三、volatile的使用 表示此数据可以被改变--用于编译器对此数据的优化假定,当编译器读取此数据时会认为它已 被改变会再次读取到寄存器中,不会假定它没变从而直接使用寄存器的值。 const volatile表示这个对象不能被程序员改变,但可以通过外面的工具改变

  • 版权声明: 本博客所有文章,未经许可,任何单位及个人不得做营利性使用!转载请标明出处!如有侵权请联系作者。
  • Copyrights © 2015-2020 翟天野

请我喝杯咖啡吧~