C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++ 左值引用const 关键字

详解C++ 左值引用与 const 关键字

作者:木三百川

这篇文章主要介绍了C++ 左值引用与 const 关键字,左值引用是已定义的变量的别名,其主要用途是用作函数的形参,将 const 关键字用于左值引用时,其在初始化时可接受的赋值形式变得更加广泛了,这里来总结一下,需要的朋友可以参考下

左值引用是已定义的变量的别名,其主要用途是用作函数的形参,将 const 关键字用于左值引用时,其在初始化时可接受的赋值形式变得更加广泛了,这里来总结一下。

左值引用是已定义的变量的别名,其主要用途是用作函数的形参,通过将左值引用变量用作参数,函数将使用原始数据,而不是副本。引用变量必须在声明时同时初始化,可将 const 关键字用于左值引用,如下所示:

//声明并初始化常规左值引用变量
int x = 55;
int & rx = x;
 
//将const关键字用于左值引用变量,以下几种为等效表示
int x = 55;
const int & crx = x;
int const & crx = x;

在 Microsoft Visual Studio 中连续多个 const 会被编译器解释成一个,即 const const const const int &const int & 等效,除此之外,const int const & 在 Microsoft Visual Studio 中也与 const int & 等效,而 int & const 在 QT 中将会报错,在 Microsoft Visual Studio 中与 int & 等效。

以上两种类型左值引用的特性如下(旧版 C++ 可能与下列特性不十分吻合,以 C++11 为准):

常规左值引用变量的初始化用法如下:

//初始化用法一:作为short变量别名
short x = 55;
short & rx = x;
cout << x;  //结果为55
cout << rx; //结果为55
cout << &x; //32位系统结果为0x0093F7BC
cout << &rx;//32位系统结果为0x0093F7BC
cout << sizeof(x); //结果为2
cout << sizeof(rx);//结果为2
 
//初始化用法二:作为short变量别名,多层引用
short x = 55;
short & rx = x;
short & rxx = rx;
 
//初始化用法三:作为short变量别名,指针表示法,指针为short*
short x = 55;
short * px = &x;
short & rx = *px;
 
//初始化用法四:作为short变量别名,指针表示法,指针为short *const
short x = 55;
short * const px = &x;
short & rx = *px;

const 关键字修饰的左值引用变量初始化用法如下:

//初始化用法一:作为short变量别名
short x = 55;
const short & rx = x;
 
//初始化用法二:作为const short变量别名
const short x = 55;
const short & rx = x;
 
//初始化用法三:作为short变量别名,多层引用
short x = 55;
short & rx = x;
const short & rxx = rx;
 
//初始化用法四:作为short变量别名,多层引用,第一层引用为const
short x = 55;
const short & rx = x;
const short & rxx = rx;
 
//初始化用法五:作为short变量别名,指针表示法,指针为short*
short x = 55;
short * px = &x;
const short & rx = *px;
 
//初始化用法六:作为short变量别名,指针表示法,指针为const short*
short x = 55;
const short * px = &x;
const short & rx = *px;
 
//初始化用法七:作为short变量别名,指针表示法,指针为short *const
short x = 55;
short *const px = &x;
const short & rx = *px;
 
//初始化用法八:作为short变量别名,指针表示法,指针为const short *const
short x = 55;
const short *const px = &x;
const short & rx = *px;
 
//初始化用法九:将创建临时变量,类型为int的非左值,字面常量
const int & rx = 100;
 
//初始化用法十:将创建临时变量,类型为int的非左值,多项表达式
const int & rx = 1+50*2;
 
//初始化用法十一:将创建临时变量,类型为int的非左值,函数返回int值
const int & rx = abs(10);
 
//初始化用法十二:将创建临时变量,类型不是int但可转换为int的变量
short x = 55;
const int & rx = x;
cout << x;  //结果为55
cout << rx; //结果为55
cout << &x; //32位系统结果为0x006FFCF0
cout << &rx;//32位系统结果为0x006FFCD8
cout << sizeof(x); //结果为2
cout << sizeof(rx);//结果为4
 
//初始化用法十三:将创建临时变量,类型不是int但可转换为int的非左值,字面常量
const int & rx = 100.0;
 
//初始化用法十四:将创建临时变量,类型不是int但可转换为int的非左值,多项表达式
const int & rx = 1.0+50.0*2.0;

将初始化时 int &const int & 可接受的形式列个表,如下:

初始化时可接受的形式int & 类型const int & 类型
int 变量可以可以
const int 变量不可以可以
int & 变量可以可以
const int & 变量不可以可以
int * 所指变量可以可以
int * const 所指变量可以可以
const int * 所指变量不可以可以
const int * const 所指变量不可以可以
形如 100 的 int 字面常量不可以可以(将创建临时变量)
形如 1+50*2 的 int 多项表达式不可以可以(将创建临时变量)
返回类型为 int 的函数返回值不可以可以(将创建临时变量)
类型可以转换为 int 的变量不可以可以(将创建临时变量)
形如 100.0 可转换为 int 的字面常量不可以可以(将创建临时变量)
形如 1.0+50.0*2.0 可转换为 int 的多项表达式不可以可以(将创建临时变量)

到此这篇关于C++ 左值引用与 const 关键字的文章就介绍到这了,更多相关C++ 左值引用const 关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文