欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Thinking in C++ Notes 常量

程序员文章站 2024-02-29 17:23:04
...

const的变量在预处理阶段处理,并且值不变。

int, bool, char, 指针类型常量会存储在符号表中,并加以优化,即常量折叠(constant folding)

  1. 如定义的两个const变量都是同一个值,其实使用的是符号表中的同一个值。会根据程序使用情况决定是否分配栈内存。
  2. 常量取值为表达式时,将表达式结果存在符号表中,即仅做一次运算。

其他类型(如结构)const变量意味着不能改变的一块存储空间(静态存储区)

更多参考:

 

C和C++对于const的定义是很不同的,C中const的意思是:

一个不能被改变的普通变量,const常量总是占用存储,并且名字是全局符。在C++中可以使用extern const int 来达到同样的效果

无论如何,传递一个地址给函数时,尽量使用const来修饰。一个典型的错误就是将临时量传递给一个函数,而这个函数对该临时量进行了修改。这会引发错误,因为表达式被编译过后,临时量将被清除。

构造函数初始化列表,被用于初始化函数执行之前的对象初始化,可用于const属性赋值。形如:

class::foo(args) prop1(value1), prop2(value2), ... {}

这些常量都在预处理阶段, 只有static const可以被看做是编译期间的常量。但是static const在C中是不允许的,可以使用enum hack-匿名enum形如:

enum { size = 200 }

const成员函数的定义,const放在参数列表后面,如 class::foo() const {}

const成员函数的作用:

Declaring a member function with the const keyword specifies that the function is a "read-only" function that does not modify the object for which it is called.

http://msdn.microsoft.com/en-us/library/6ke686zh(v=vs.80).aspx

如何改变const变量? 强制类型转换,如(char*) "text", 或者使用关键字mutable.

volatile和const对应,表示“可变”,对于该变量的读取不使用优化技术(寄存器),而每次都从内存读取,一起被称为c-v限定词。详见:http://*.com/questions/4592762/difference-between-const-const-volatile

转载于:https://my.oschina.net/edwardpku/blog/108232