1.在C语言中,const不是真正意义上的常量,const修饰的局部变量在栈上分配空间,修饰的全局变量在只读存储区分配空间,只在编译期有用,在运行期无用;C语言中如果想要定义真正意义上的常量只能通过枚举
但在C++中,const修饰的是常量
但是在C++中,const常量和define宏定义有什么不同?
(1)const常量由编译器处理,会对const常量进行类型检查和作用域检查
(2)宏定义由预处理器处理,单纯的文本替换
C中
int main() {
const int c = 0;
int* p = (int*)&c;
*p = 5;
printf("c=%d\n", c); //5
}
C++中
int main() {
const int c = 0;
int* p = (int*)&c;
*p = 5;
printf("c=%d\n", c); //0
}
2.(a<b?a:b)=3; //返回a或b的引用,可作为左值
3.const引用让变量拥有只读属性,但可以通过指针改变这个只读变量的值
int main() {
int a = 4;
const int& b = a;
int* p = (int*)&b;
*p = 5;
cout << a << endl << b << endl;//5 5
}
引用的内部实现是一个指针常量
Type& name;<------>Type* const name;
void f(int &a) {a=5;} <------> void f(int *const a) {*a=5;}