網站首頁 編程語言 正文
左值引用是已定義的變量的別名,其主要用途是用作函數的形參,將 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 為準):
- 類型為
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
、多項表達式1+50*2
、函數的int
返回值)、類型不是int
但可轉換為int
的變量或非左值(比如short
變量、short &
變量、多項表達式1.0+50.0*2.0
、字面常量100.0
、函數的double
返回值)在初始化時賦給crx
,也必須在聲明時初始化,后續無法更換所引用的變量。變量初始化完成后,其表現與const int
類型一致。
常規左值引用變量的初始化用法如下:
//初始化用法一:作為short變量別名 short x = 55; short & rx = x; cout << x; //結果為55 cout << rx; //結果為55 cout << &x; //32位系統結果為0x0093F7BC cout << ℞//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 << ℞//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 ?的多項表達式 |
不可以 | 可以(將創建臨時變量) |
原文鏈接:https://www.cnblogs.com/young520/p/16705812.html
相關推薦
- 2022-10-29 python的strip、lstrip、rstrip函數的用法和實例
- 2022-06-10 Python?Pytorch學習之圖像檢索實踐_python
- 2022-05-15 Qt中QPixmap、QImage、QPicture、QBitmap四者區別詳解_C 語言
- 2022-07-23 C++深入淺出探索數據結構的原理_C 語言
- 2022-05-09 .Net?Core創建Api進行文件上傳功能_實用技巧
- 2022-11-09 ASM的tree?api對匿名線程的hook操作詳解_Android
- 2022-09-16 記一次SQL優化的實戰記錄_數據庫其它
- 2023-01-20 Python中用try-except-finally處理異常問題_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支