常量折叠
- const关键字修饰的变量被称为常量
- 在编译过程中,计算出常量表达式的值,并保存在常量表中,引用处替换成常量的值。以期优化编译速度。
#include
#include
using namespace std;
int main()
{
const int a = 1;
int * p = (int *)&a;
*p = 2;
cout << "P is:" << *p << "tA is :" << a << endl;
cout << "P's address is:" << p << "tA's address is :" << &a << endl;
int b = 1;
int * q = &b;
*q = 2;
cout << "Q is:" << *q << "tB is :" << b << endl;
cout << "Q's address is:" << q << "tB's address is :" << &b << endl;
return 0;
}
P is:2 A is :1
P's address is:0x61feb4 A's address is :0x61feb4
Q is:2 B is :2
Q's address is:0x61feb0 B's address is :0x61feb0
- 从上面代码可以看出:
- p 和 a 指向同一块内存,但是值却不一样,原因就是 a 作为常量在编译过程中就被替换成了 1,p指向的地址虽然改变了,编译过程中已经变成了 1 这个常数。所以打印的 a 值就是1。