C++深度解析 经典问题解析---const和引用,只读变量和常量,引用和指针(11)【详细】

C++深度解析 经典问题解析 const和引用,只读变量和常量(11)【详细】

 

 

 

对于const的疑问

const常量判别准则

  • 只有用字面量初始化的const常量才会进入符号表,是真正意义上的常量
  • 使用其他变量初始化的const常量仍然是只读变量
  • volatile修饰(易变的,可能发生变化的)的const常量不会进入符号表,volatile const同时修饰的标识符,得到的是只读变量。
  • const引用的类型初始化变量的类型相同:初始化变量成为只读变量,不同生成一个新的只读变量

只读变量和常量的区别:

归纳起来:编译期间,不能直接确定初始值的const标识符,都是只读变量

    //用字面量1初始化x,x是真正意义上的常量,并且编译器会为常量x分配4个字节的空间,x会进入了符号表
    const int x = 1;
    
    //因为使用变量初始化,所以引用rx代表一个只读变量。编译器会为常量x分配4个字节的空间,rx代表这4个字节空间的别名
    const int& rx = x; //引用代表变量的别名(也就是说一段内存的别名)

引用代表变量的别名,变量的别名代表一段内存空间的别名。

const引用:

const引用使得存在的变量拥有只读属性

C++ 中,**引用****指针常量**是两个不同但相关的概念,它们在使用方式、语义以及应用场景上存在显著差异。 ### 引用的本质 引用是某个变量的别名,它与被引用变量共享同一个内存地址。一旦引用被初始化,它就不能再被重新绑定到另一个变量引用在声明时必须进行初始化,否则会导致编译错误。例如: ```cpp int a = 10; int &ref = a; // ref 是 a 的别名 ``` 对 `ref` 的操作实际上就是对 `a` 的操作,它们指向的是同一块内存。引用通常用于函数参数传递返回值中,以避免拷贝大对象,提高性能 [^1]。 ### 指针常量的定义 指针常量(Pointer to Constant)是指指针所指向的内容不能被修改,但指针本身可以指向其他对象。其声明方式为 `const T *ptr` 或 `T const *ptr`。例如: ```cpp int a = 10; const int *ptr = &a; // 指向常量指针 ``` 此时,`*ptr = 20;` 是非法的,因为指针指向的内容是只读的。但 `ptr` 可以被重新赋值,指向其他变量 [^3]。 ### 引用指针常量区别 | 特性 | 引用 | 指针常量 | |---------------------|----------------------------------|----------------------------------| | **是否可重新绑定** | 不可重新绑定到其他变量 | 可以指向其他变量 | | **是否必须初始化** | 必须在声明时初始化 | 可以声明后赋值 | | **是否可为空** | 不可为空 | 可以为空指针 | | **操作方式** | 直接访问变量,无需解引用 | 需要解引用操作符 `*` 来访问内容 | | **应用场景** | 函数参数传递、返回值优化 | 保护数据不被修改、只读访问 | 例如,下面是一个使用指针常量的示例: ```cpp int a = 10, b = 20; const int *ptr = &a; ptr = &b; // 合法:指针可以重新指向其他变量 // *ptr = 30; // 非法:不能通过指针修改所指向的内容 ``` 而引用的使用方式如下: ```cpp int a = 10; int &ref = a; ref = 20; // 合法:修改的是 a 的值 // &ref = b; // 非法:引用不能重新绑定到其他变量 ``` ### 总结 引用指针常量在语义上具有不同的用途。引用更适用于需要直接操作变量且不希望指针被重新绑定的场景,而指针常量则适用于需要保护数据不被修改但仍允许指针指向其他对象的情况。理解它们的区别有助于在实际编程中做出更合适的选择 [^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值