2.C/C++的const
1.C语言的const修饰的变量都有空间
2.C语言的const修饰的全局变量具有外部链接属性
3.C++语言的const修饰的变量有时有空间,有时没有空间(发生常量折叠,且没有对变量进行取址操作)
const int aa = 10;//没有内存
void test01()
{
//发生了常量折叠
cout << "aa=" << aa << endl;//在编译阶段,编译器:cout<<"aa="<<10<<endl;
//禁止优化volatile
//volatile const int bb = 20;//栈区
const int bb = 20;
int *p = (int*)&bb;//进行了取址操作,所以有空间
*p = 200;
cout << "bb=" << bb << endl;//cout << "bb=" << 20 << endl;
cout << "*p=" << *p << endl;
cout << "a的地址=" << (int)&bb << endl;
cout << "p指向的地址" << (int)p << endl;
}
4.C++语言中const修饰的全局变量具有内部链接属性
extern const int c = 300;//加上extern就变为外部链接属性
5.C++编译器不能优化的情况
1.不能优化自定义数据类型
2.如果用变量给const修饰的局部变量赋值,那么编译器就不能优化
3.编译器是在编译阶段来优化数据
6.尽量用const替代define
1.define没有数据类型,const修饰的变量有数据类型,可以进行数据类型检查
#define MA 128
const short ma = 128;
void func(short a)
{
cout << "func(short a)" << endl;
}
void func(int a)
{
cout << "func(int a)" << endl;
}
int main()
{
func(ma);
system("pause");
return EXIT_SUCCESS;
}
2.const修饰的变量有作用域,define不重视作用域,不能限定常量的使用范围
参考资料
参考资料来源于黑马程序员等