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

相关推荐
橘颂TA5 分钟前
【笔试】算法的暴力美学——牛客 NC213140 :除2!
c++·算法·结构与算法
wsoz44 分钟前
Leetcode普通数组-day5、6
c++·算法·leetcode·数组
favour_you___1 小时前
2026_4_8算法练习题
数据结构·c++·算法
SccTsAxR1 小时前
算法基石:手撕离散化、递归与分治
c++·经验分享·笔记·算法
Q741_1472 小时前
每日一题 力扣 3655. 区间乘法查询后的异或 II 模拟 分治 乘法差分法 快速幂 C++ 题解
c++·算法·leetcode·模拟·快速幂·分治·差分法
夏乌_Wx2 小时前
剑指offer | 2.4数据结构相关题目
数据结构·c++·算法·剑指offer·c/c++
米啦啦.2 小时前
C+类的友元与静态成员函数,类模板
c++·友元·类模板
超绝振刀怪2 小时前
【C++可变模板参数】
开发语言·c++·可变模板参数
minji...2 小时前
Linux 线程同步与互斥(二) 线程同步,条件变量,pthread_cond_init/wait/signal/broadcast
linux·运维·开发语言·jvm·数据结构·c++
梓䈑3 小时前
高性能 C++ 日志实战:spdlog 核心架构解析与最佳实践指南
c++·架构