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

详解C++ 左值引用与 const 关键字 左值引用是已定义的变量的别名其主要用途是用作函数的形参将 const 关键字用于左值引用时其在初始化时可接受的赋值形式变得更加广泛了这里来总结一下。左值引用是已定义的变量的别名其主要用途是用作函数的形参通过将左值引用变量用作参数函数将使用原始数据而不是副本。引用变量必须在声明时同时初始化可将const关键字用于左值引用如下所示12345678//声明并初始化常规左值引用变量intx 55;int rx x;//将const关键字用于左值引用变量以下几种为等效表示intx 55;constint crx x;intconst 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 可能与下列特性不十分吻合以 C11 为准类型为int 的引用rx只能作为已有变量的别名不会生成临时变量可修改所引用变量的值可将int变量、int 变量、int *指针所指变量、int *const指针所指变量在初始化时赋给rx接受可通过地址访问的非const变量必须在声明时初始化后续无法更换所引用的变量。变量初始化完成后其表现与int类型一致。类型为const int 的引用crx既可作为已有变量的别名也可在合适的时候生成临时变量成为该临时变量的别名但不可修改所引用变量的值可将int变量、const int变量、int 变量、const int 变量、int *指针所指变量、int *const指针所指变量、const int *指针所指变量、类型为int的非左值比如字面常量100、多项表达式150*2、函数的int返回值、类型不是int但可转换为int的变量或非左值比如short变量、short 变量、多项表达式1.050.0*2.0、字面常量100.0、函数的double返回值在初始化时赋给crx也必须在声明时初始化后续无法更换所引用的变量。变量初始化完成后其表现与const int类型一致。常规左值引用变量的初始化用法如下123456789101112131415161718192021222324//初始化用法一作为short变量别名shortx 55;short rx x;cout x;//结果为55cout rx;//结果为55cout x;//32位系统结果为0x0093F7BCcout rx;//32位系统结果为0x0093F7BCcout sizeof(x);//结果为2cout sizeof(rx);//结果为2//初始化用法二作为short变量别名多层引用shortx 55;short rx x;short rxx rx;//初始化用法三作为short变量别名指针表示法指针为short*shortx 55;short* px x;short rx *px;//初始化用法四作为short变量别名指针表示法指针为short *constshortx 55;short*constpx x;short rx *px;被const关键字修饰的左值引用变量初始化用法如下1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162//初始化用法一作为short变量别名shortx 55;constshort rx x;//初始化用法二作为const short变量别名constshortx 55;constshort rx x;//初始化用法三作为short变量别名多层引用shortx 55;short rx x;constshort rxx rx;//初始化用法四作为short变量别名多层引用第一层引用为constshortx 55;constshort rx x;constshort rxx rx;//初始化用法五作为short变量别名指针表示法指针为short*shortx 55;short* px x;constshort rx *px;//初始化用法六作为short变量别名指针表示法指针为const short*shortx 55;constshort* px x;constshort rx *px;//初始化用法七作为short变量别名指针表示法指针为short *constshortx 55;short*constpx x;constshort rx *px;//初始化用法八作为short变量别名指针表示法指针为const short *constshortx 55;constshort*constpx x;constshort rx *px;//初始化用法九将创建临时变量类型为int的非左值字面常量constint rx 100;//初始化用法十将创建临时变量类型为int的非左值多项表达式constint rx 150*2;//初始化用法十一将创建临时变量类型为int的非左值函数返回int值constint rx abs(10);//初始化用法十二将创建临时变量类型不是int但可转换为int的变量shortx 55;constint rx x;cout x;//结果为55cout rx;//结果为55cout x;//32位系统结果为0x006FFCF0cout rx;//32位系统结果为0x006FFCD8cout sizeof(x);//结果为2cout sizeof(rx);//结果为4//初始化用法十三将创建临时变量类型不是int但可转换为int的非左值字面常量constint rx 100.0;//初始化用法十四将创建临时变量类型不是int但可转换为int的非左值多项表达式constint rx 1.050.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字面常量不可以可以将创建临时变量形如150*2的int多项表达式不可以可以将创建临时变量返回类型为int的函数返回值不可以可以将创建临时变量类型可以转换为int的变量不可以可以将创建临时变量形如100.0可转换为int的字面常量不可以可以将创建临时变量形如1.050.0*2.0可转换为int的多项表达式不可以可以将创建临时变量到此这篇关于C 左值引用与 const 关键字的文章就介绍到这了