1、const int a = 100;
标准C++ const 变量声明加初始化,因为默认内部链接所以必须被初始化,其作用域为此文件,编译器经过类型接茬后直接用100在编译时替换。
2、extern const int t = 100;
将const改为外部链接,作用域扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义。
3、const int r[] = {1,2,3,4};
struct S
{
int a, b;
};
const S s[] = {(1,2), (3,4)};
二、指针
2、int * const r=&x;
声明r为一个常量指针,他指向x,r这个指针的指向不能被修改,但他指向的地址的内容可以修改。
3、const int * const r=&x;
综合1、3用法,r是一个指向常量的常量型指针。
标准C++ const 变量声明加初始化,因为默认内部链接所以必须被初始化,其作用域为此文件,编译器经过类型接茬后直接用100在编译时替换。
2、extern const int t = 100;
将const改为外部链接,作用域扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义。
3、const int r[] = {1,2,3,4};
struct S
{
int a, b;
};
const S s[] = {(1,2), (3,4)};
二、指针
1、const int *r = &x;与int const *r=&x; 用法1完全等价,没有任何区别。
声明r作为一个指向常量的x指针,x指向的对象不能被修改,但他可以指向任何地址的常量。但是如果操作的时候使用了const int *r = &y;这样就会报错,因为*r只能指向r
2、int * const r=&x;
声明r为一个常量指针,他指向x,r这个指针的指向不能被修改,但他指向的地址的内容可以修改。
3、const int * const r=&x;
综合1、3用法,r是一个指向常量的常量型指针。