最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中`&`符號用法全解析

 更新時間:2026年05月23日 10:41:08   作者:海青橘  
在C++里,&有三種不同的含義,你代碼里主要用,主要用于引用和取地址,理解&對于單例模式至關重要,避免復制對象、提升效率,本文逐行解析代碼中所有&的含義、作用用和區(qū)別,幫助你完全掌握,立即查看

C++ 中&符號全解析(結合你的單例代碼逐行講透)

我直接結合你這段代碼,把所有出現(xiàn)的 &、語法含義、作用、區(qū)別一次性講清楚,新手也能完全看懂。

先給你一個總覽:

在 C++ 里,&3 種完全不同的含義,你的代碼里用到了 2 種

  1. 引用(最常用,你的代碼核心) → 變量/函數(shù)名前面的 &
  2. 取地址 → 極少用在單例里
  3. 按位與 → 這里完全不涉及

一、你的代碼里所有&逐行解析

這里的&:引用(左值引用)

S& operator=(const S&) = delete;
// ↑這里                ↑這里

S&:返回值是引用

  • 語法:類型 & 變量名
  • 意思:返回這個對象本身,而不是復制一份
  • 作用:避免拷貝、提高效率、保證操作的是同一個單例對象

const S&:參數(shù)是引用

  • 意思:傳參時不復制對象,直接用原來的對象
  • const:保證函數(shù)內(nèi)部不能修改這個對象
  • 作用:高效、安全、不產(chǎn)生臨時對象

這里的&:引用

static S& gets() { return s1; }
//      ↑這里
  • 意思:返回單例對象的引用
  • 不是返回對象副本!返回的就是唯一的那個 s1 本身
  • 這是單例模式必須用引用的原因:永遠只有一個對象

這里的&:定義引用變量

S& s = S::gets();
// ↑這里
  • 語法:類型 & 引用名 = 實體對象;
  • 意思:s 是一個別名,它和 s1同一個東西
  • 不是新對象!不占額外內(nèi)存!只是別名!

二、最重要:引用到底是什么?(用最簡單的話)

引用 = 變量的別名

就像一個人有大名和小名,都是指同一個人。

int a = 10;
int& b = a;
  • ab同一個變量
  • 修改 b 就是修改 a
  • 不占新內(nèi)存
  • 必須初始化(不能為空)
  • 一旦綁定,不能改綁別的變量

三、語法格式(背會這 4 種就夠了)

1. 定義引用變量

類型 & 引用名 = 變量名;
int &b = a;
S &s = 對象;

2. 函數(shù)返回引用

類型 & 函數(shù)名() { ... }
S & gets() { ... }

作用:返回對象本身,不復制。

3. 函數(shù)參數(shù)使用引用

void func(const 類型 & 參數(shù)名)
void func(const S & obj)

作用:高效傳參,不復制對象。

4. 賦值運算符重載(規(guī)范寫法)

類型 & operator=(const 類型 &)
S & operator=(const S &)

四、你的單例代碼里為什么到處都要用&?

我告訴你核心原因,這是單例模式的靈魂:

單例 = 只能有一個對象

如果不用引用,就會復制出新對象,單例直接失效!

看對比:

錯誤寫法(不用引用 → 復制對象 → 不是單例)

static S gets() { return s1; }
S s = S::gets();

這里會拷貝構造一個新對象,破壞單例!

正確寫法(用引用 → 同一個對象 → 單例)

static S& gets() { return s1; }
S& s = S::gets();

S& 保證永遠操作唯一的那個單例對象。

五、最容易混淆的點:引用 & vs 指針 *

你只需要記住一句話:

引用 = 安全的、自動解引用的指針

特性引用 S&指針 S*
空值不能為空可以為空
重新賦值不能
訪問成員.->
內(nèi)存不占額外內(nèi)存占指針內(nèi)存

你的單例用引用,就是為了安全、簡潔、不復制。

六、總結(最簡單版本)

你代碼里所有的&都表示

引用(別名)

語法規(guī)則:

  1. S& → 返回引用(返回對象本身,不復制)
  2. const S& → 參數(shù)引用(高效傳參)
  3. S& s → 定義引用變量(別名)

一句話記?。?/strong>

& 放在類型后面,就是引用,代表“別名”,不復制對象,操作同一個實體。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 基于OpenCV實現(xiàn)圖像分割

    基于OpenCV實現(xiàn)圖像分割

    這篇文章主要為大家詳細介紹了基于OpenCV實現(xiàn)圖像分割,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • c++實現(xiàn)md5加密的代碼

    c++實現(xiàn)md5加密的代碼

    這篇文章主要介紹了c++實現(xiàn)md5加密的實例代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C/C++實現(xiàn)去除字符串中的空格(附帶源碼)

    C/C++實現(xiàn)去除字符串中的空格(附帶源碼)

    這篇文章主要為大家詳細介紹了C/C++實現(xiàn)去除字符串中的空格的相關方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-11-11
  • boost.asio框架系列之調(diào)度器io_service

    boost.asio框架系列之調(diào)度器io_service

    這篇文章介紹了boost.asio框架系列之調(diào)度器io_service,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • C++超細致講解隊列queue的使用

    C++超細致講解隊列queue的使用

    隊列先進先出,即只能在容器的末尾添加新元素,只能從頭部移除元素,下面這篇文章主要給大家介紹了關于C++中隊列queue用法的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • Qt QMessageBox類使用教程

    Qt QMessageBox類使用教程

    QMessageBox類提供一個模態(tài)對話框,用于通知用戶或詢問用戶一個問題并接收答案。這篇文章主要介紹了QMessageBox的一些常用用法,需要的小伙伴快來學習一下
    2021-12-12
  • C語言之malloc動態(tài)分配內(nèi)存和free釋放

    C語言之malloc動態(tài)分配內(nèi)存和free釋放

    這篇文章主要介紹了C語言之malloc動態(tài)分配內(nèi)存和free釋放,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C語言實現(xiàn)萬年歷

    C語言實現(xiàn)萬年歷

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)萬年歷,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++ Boost PropertyTree解析INI文件詳解

    C++ Boost PropertyTree解析INI文件詳解

    Boost PropertyTree庫不僅可以解析JSON,XML格式,還可以直接解析INI格式文件。這篇文章就是為大家介紹一下如何通過Boost PropertyTree解析INI文件,需要的可以參考一下
    2022-01-01
  • 詳解C++中的左值,純右值和將亡值

    詳解C++中的左值,純右值和將亡值

    C++中本身是存在左值,右值的概念,但是在C11中又出現(xiàn)了左值,純右值,將亡值得概念;這里我們主要介紹這些值的概念,感興趣的可以了解一下
    2022-09-09

最新評論

库尔勒市| 苍梧县| 正安县| 龙里县| 灵丘县| 沈阳市| 安化县| 商丘市| 淅川县| 江陵县| 彩票| 扎赉特旗| 西畴县| 锦屏县| 济南市| 十堰市| 开阳县| 高密市| 象山县| 响水县| 屏东县| 津市市| 舒兰市| 贞丰县| 安徽省| 昌吉市| 亳州市| 红原县| 顺义区| 龙南县| 临泽县| 龙岩市| 福贡县| 白城市| 炉霍县| 八宿县| 平泉县| 宝山区| 长顺县| 巴塘县| 米林县|