日常总结--c++常量的深入理解

常量常常是形如这样:

const int x = 5;    //整型常量
const char* pc = "nddd"; //字符型常量

同是常量,但是两者有者不同的存储区。整型常量(数值型常量一类)是立即数,存储在寄存器中。但是字符型常量确是存储在内存中一个叫“文字常量区”的地方,不同系统应该有不同的起始位置。举个例子:

const char* pc = "nddd";
const char* pb = "nddd";


pc与pb是两个指向相同字符常量的不同变量。测试发现,pc与pb指向相同的位置(也就是cout << (void*)pc << (void*)pb;输出相同)。这就引发一个问题:字符型常量的生命周期是多长?答案无非两种情况:1、在某个域内 2、在程序执行范围内,于是,我做了以下实验:

void fun1(){
const char* pc = "123";
cout << (void*)pc << endl;
}

void fun2(){
const char* pb = "123";
cout << (void*)pb << endl;
}

在main()中无论以怎样的顺序执行这两个函数,输出结果都相同。也就是说,定义于“文字常量区”的字符型常量的生命周期是整个程序。但是这里要注意一点,“123”的生命期并不等同于pb或者pc的生命期,pb、pc是变量,他们的生命在函数结束时就结束了。

温润如玉,坚毅如铁。
原文地址:https://www.cnblogs.com/heisen/p/10467328.html