c++ primer

1,
C语言中的const:被修饰后不能做左值,可以不初始化,但是之后没有机会再初始化。不可以当数组的下标,可以通过指针修改。简单来说,它和普通变量的区别只是不能做左值而已。其他地方都是一样的。

C++中的const:真正的常量。定义的时候必须初始化,可以用作数组的下标。const在C++中的编译规则是替换和宏很像),(类似字面值的自动识别)所以它被看作是真正的常量。也可以通过指针修改。需要注意的是,

函数的返回值编译阶段不能确定。例如 const int a =get_size();

int b[a]; //error

int b=50 ;const int a=b;

int c[a];//correct 

只要能识别到字面值就可以;

(引用了一个编译阶段不确定的值)无法被直接替换 b的值不确定

const在生成符号时,是local符号。即在本文件中才可见。如果非要在别的文件中使用它的话,在文件头部声明:extern cosnt int data = 10;这样生成的符号就是global符号。

2.

C语言中,const 就是用来限定一个变量不允许被改变的修饰符,即只读变量,因为占有存储空间,所以编译器不知道编译时的值,所以就不知道该给数组定义多大的。

C++ 中, const修饰的 可以看成是编译期的常量

对于基本数据类型:编译器会把它放到符号表中,而不分配存储空间。

对于ADT(Abstract Data Type 抽象数据类型)/ UDT(用户定义类型)的const对象则需要分配存储空间(大对象)。

以及一些情况下也需要分配存储空间,例如强制声明为extern的符号常量或取符号常量的地址等操作。

你可能感兴趣的:(c++ primer)