博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++常量的引用 const
阅读量:4675 次
发布时间:2019-06-09

本文共 1267 字,大约阅读时间需要 4 分钟。

  如果是对一个常量进行引用,则编译器首先建立一个临时变量,然后将该常量的值置入临时变量中,对该引用的操作就是对该临时变量的操作。对C++常量引用可以用其它任何引用来初始化;但不能改变。

关于引用的初始化有两点值得注意:

(1)当初始化值是一个左值(可以取得地址)时,没有任何问题;

(2)当初始化值不是一个左值时,则只能对一个const T&(常量引用)赋值。而且这个赋值是有一个过程的:

首先将值隐式转换到类型T,然后将这个转换结果存放在一个临时对象里,最后用这个临时对象来初始化这个引用变量。

例子:

double& dr = 1; // 错误:需要左值 const double& cdr = 1; // ok

第二句实际的过程如下:

double temp = double(1); const double& cdr = temp;

作函数参数时:

// bc_temp_objects_not_bound_to_nonconst_ref.cpp // compile with: /EHsc #include "iostream" using namespace std; class C {}; void f(C & c) { cout << "C&" <

结果:

C const &

更直接的,用基本类型:

 

#include 
using namespace std; void display(int const &ref) {cout<
<<'\n';} int main() { int i=1; display(i); int const anotheri=2; display(anotheri); display(2); display(1+2); display(static_cast
(3.14159)); }

通过C++常量引用从函数返回一个局部对象:

一般从一个函数返回一个局部对象的引用是不对的:

 

T & my_op ( void ) { T t; return t; } // The T object t got destroyed here so the returned reference is not valid anymore.

特殊情况:返回一个常引用

 

const T & my_op ( void ) { T t; return t; } const T & my_t_obj = my_op ();

在这个情况下,局部变量 t 不会被直接析构,而是会保留到 my_t_obj 的生命周期结束为止。

总之,C++常量引用语法上可以引用一个临时变量。这种方法在使用引用作函数参数和返回局部变量时有意义。我目前看来常量引用主要用在作函数参数或保证不修改原变量的时候。

转载于:https://www.cnblogs.com/ishang/p/3307605.html

你可能感兴趣的文章
Java中的Map List Set等集合类
查看>>
大道至简阅读笔记01
查看>>
多个模块使用python logging
查看>>
Linux高级变量
查看>>
php ffmpeg
查看>>
java中== 和 .equals()的区别
查看>>
网络流学习笔记
查看>>
让我们一起Go(二)
查看>>
Linq 中按照多个值进行分组(GroupBy)
查看>>
jquery validate
查看>>
模板函数与模板类
查看>>
Direct2D处理几何图形之间的碰撞检测(下)
查看>>
WPF月视图控件
查看>>
给WPF文字加多条修饰线
查看>>
Android指纹识别
查看>>
C#设计模式之十六观察者模式(Observer Pattern)【行为型】
查看>>
VS中的预先生成事件和后期生成事件
查看>>
JavaScript知识(二)
查看>>
Windows phone 8 学习笔记(7) 设备
查看>>
SQL Server的备份
查看>>