C++进阶02——C++和C中const的区别、三目运算符、引用的本质

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;}

相关推荐
磊 子20 分钟前
C++设计模式
javascript·c++·设计模式
h_a_o777oah1 小时前
【算法专项】扩展域并查集:原理详解及解决大部分种类并查集问题(洛谷P5937 P2024 C++代码)
数据结构·c++·算法·acm·并查集·扩展域·逻辑建模
雾沉川2 小时前
Visual C++ 运行库合集 v105.0 部署与故障排查技术指南
开发语言·c++·dll
丘山望岳2 小时前
剑起霜华——平衡二叉树(AVL树 )精讲
开发语言·数据结构·c++
Boom_Shu2 小时前
浅拷贝与深拷贝
开发语言·c++·算法
Mortalbreeze3 小时前
C++ Lambda表达式详解:从捕获列表到底层原理
开发语言·c++
为何创造硅基生物3 小时前
LVGL
c++·ui
只做人间不老仙3 小时前
C++ grpc 拦截器示例学习
开发语言·c++·学习
qeen873 小时前
【C++】类与对象之零散知识点补充(四)
c++·笔记·学习·语法
Irissgwe4 小时前
顺序表和链表
数据结构·c++·链表·c·顺序表·线性表