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

相关推荐
chenbingjie_c1 小时前
C++ 进阶核心知识点总结:模板、内存分区、new/delete、内存池
开发语言·c++
Frank_refuel3 小时前
【C++】Json库介绍和使用
c++
重生之小比特3 小时前
【C++进阶】map和set
java·开发语言·c++
知识分享小能手4 小时前
C++ 学习教程,从入门到精通,C++对象和类 — 详细知识点总结(10)
开发语言·c++·学习
顺顺 尼5 小时前
linux 进程信号(上)
linux·c++·算法
海上小飞龙6 小时前
改一个数,右边全得重算,这题怎么扛住两万次查询
java·c++·python
Persistent的粽子!6 小时前
双指针算法:最大盛水容器
c++·算法·leetcode
小小龙学IT6 小时前
三菱 PLC MC 协议(SLMP / QnA 兼容 3E 帧)深度解析:从帧结构到 C++/Go 双语言采集实战
c语言·c++·golang
程序猿编码7 小时前
C++/CUDA 手写 LLM 推理引擎:拆解 vLLM 核心 PagedAttention 与连续批处理
开发语言·c++·深度学习·神经网络·推理·vllm
hold?fish:palm7 小时前
44 二叉搜索树中第K小的元素
开发语言·c++·算法