C++ 引用介紹

很好!既然你有 C 的基礎,那么理解 C++ 的「引用(reference)」會容易很多。我們來一步步講清楚這個概念。


🌟 一句話總結:

C++ 引用(reference)就是已存在變量的“別名”,它不是拷貝,而是原變量的另一種名字。


🧱 基本語法:

int a = 10;
int& ref = a;  // ref 是 a 的引用

這意味著:

  • ref 就是 a,對 ref 的修改就是對 a 的修改。
  • ref 不能指向別的變量。
  • 引用必須初始化,一旦綁定到某個變量,就不能再改了。

🔍 和 C 的指針對比

特性引用 int& r = a指針 int* p = &a
是否可以為 null?? 不行? 可以為 nullptr
是否可以重新綁定?? 不行? 可以改變指向
訪問方式直接用 r*p
語法簡潔??

🧪 舉個例子:

#include <iostream>
using namespace std;void addOne(int& x) {x += 1;
}int main() {int a = 5;addOne(a);cout << a << endl;  // 輸出 6return 0;
}

這個例子里,xa 的引用,x += 1 實際就是 a += 1


🚧 注意事項:

  1. 引用不是對象的副本,而是原對象的另一個名字。
  2. 不能給引用重新賦值來讓它指向另一個變量。
  3. 引用必須在定義時初始化(不像指針可以先聲明)。

🎯 常見用途:

  • 函數參數傳遞:避免復制,提高效率
  • 函數返回值:可以返回引用,避免拷貝
  • 實現操作符重載等語法糖

如果你寫 C 比較多,可以把 C++ 的引用理解成“更安全、更好用的指針替代品”,但它不是指針本身。


非常棒的問題!你已經觸及 引用的底層實現原理,這是 C++ 學習中的高級理解階段。


? 簡短回答:

C++ 引用在本質上可以被類比為“const 指針的語法糖”,但它 不是嚴格意義上的 const 指針,只是行為和限制上很相似。


🧠 展開解釋:為什么說“像 const 指針”?

我們先回顧下這段代碼:

C++ 引用:

int a = 10;
int& ref = a;  // 引用
ref = 20;

你不能讓 ref 再引用別的變量。


用 C 模擬:

int a = 10;
int *const ref = &a;  // const pointer to int
*ref = 20;
  • ref 這個指針是 const 的,不能再改地址,只能指向 a
  • 你可以通過 *ref 改變 a 的值。

是不是和 C++ 引用的行為幾乎一致??


? 但引用 ≠ const 指針

我們再強調幾點區別:

對比點C++ 引用 (int&)C 中的 const 指針 (int* const)
是否有獨立地址? 通常沒有? 有自己的內存地址
是否可能為 null? 不可以? 可以初始化為 NULL
是否需要解引用操作? 不需要? 需要寫 *ptr
編譯器會做語義檢查? 是引用語義? 是指針語義

🎯 結論:

? 所以:

引用本質上更像編譯器“自動生成指針解引用”的行為,語義上接近一個不能改地址的指針(const pointer),但它不是指針。

  • 你可以用 const 指針來類比學習引用
  • 但編譯器內部并不是簡單地“把引用轉成 const 指針”這么簡單,它還會做很多額外的語義處理,比如綁定規則、引用折疊、生命周期延長等。

想深入底層?

如果你愿意,我可以給你看一段 C++ 編譯成匯編之后,引用變量是怎么處理的,或者用 clang -S 生成 .s 文件觀察引用是如何被“消失”的(因為它真的不會生成實體地址)。

是否繼續?👀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83453.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83453.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83453.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學習筆記086——@PostConstruct注解和InitializingBean接口的使用

文章目錄 1、PostConstruct注解1.1 介紹1.2 用法1.3 場景 2、InitializingBean接口2.1 介紹2.2 用法 1、PostConstruct注解 1.1 介紹 PostConstruct 是 Java EE/Jakarta EE 中的一個注解&#xff0c;用于標記一個方法在依賴注入完成后執行初始化操作。它通常與 Spring 框架一…

考研系列—408真題操作系統篇(2015-2019)

目錄 # 2015年 1.死鎖處理 (1)預防死鎖 (2)避免死鎖 (3)死鎖檢測和解除 2.請求分頁系統的頁面置換策略、頁面置換策略 3.頁、頁框、頁表,基本分頁系統 # 2016年 1.異常、中斷 2.頁置換算法 3.進程的互斥操作 4.SPOOLing技術(從軟件方面實現設備共享) 5.一定要牢記…

argocd部署cli工具并添加k8s集群

先決條件: 1.已經有k8s集群,(網上一萬種部署方式,這里我使用的是kubekey部署的),也埋了個坑,后面說明. 2.已經部署好argocd,并驗證web已經可以訪問.參見 k8s部署argocd-CSDN博客 部署客戶端工具, 這里我是從web頁面上直接下載的對應版本的cli工具. 打開已經部署好的argoc…

打卡day52

簡單cnn 借助調參指南進一步提高精度 基礎CNN模型代碼 import tensorflow as tf from tensorflow.keras import layers, models from tensorflow.keras.datasets import cifar10 from tensorflow.keras.utils import to_categorical# 加載數據 (train_images, train_labels),…

OpenGL ES繪制3D圖形以及設置視口

文章目錄 關于 glDrawElements基本概念使用場景mode 繪制模式type 索引數據類型indices 索引緩沖區工作原理繪制正方體實例 視口透視投影&#xff08;Perspective Projection&#xff09;正交投影&#xff08;Orthographic Projection&#xff09;正交投影和透視投影對比 關于 …

【SAS求解多元回歸方程】REG多元回歸分析-多元一次回歸

多元一次回歸是一種統計方法&#xff0c;用于分析多個自變量&#xff08;解釋變量&#xff09;與一個因變量&#xff08;響應變量&#xff09;之間的線性關系。 目錄 【示例】 基本語法 SAS代碼 參數估計 方差分析 回歸統計量 y的擬合診斷 y的回歸變量值 【示例】 設Y…

卡通幼兒園教育通用可愛PPT模版分享

幼兒園教育通用PPT模版&#xff0c;教育教學PPT模版&#xff0c;卡通教育PPT模版&#xff0c;可愛卡通教學課件PPT模版&#xff0c;小清新動物卡通通用PPT模版&#xff0c;教學說課通用PPT模版&#xff0c;開學季PPT模版&#xff0c;國學頌歌PPT模版&#xff0c;可愛簡約風PPT模…

力扣HOT100之技巧:75. 顏色分類

這道題實際上就是讓我們不用sort()函數來實現對原數組的排序&#xff0c;這里我直接使用快速排序對原數組進行排序了&#xff0c;也是復習一下基于快慢指針的快速排序寫法。面試手撕快排的思路參考這個視頻。 用時擊敗100%&#xff0c;還行。下面直接貼代碼。 class Solution …

離線部署openstack 2024.1 keystone

控制節點身份服務 離線下載 apt-get install --download-only keystone python3-openstackclient apache2 libapache2-mod-wsgi-py3mkdir /controller/keystone mv /var/cache/apt/archives/*.deb /controller/keystone/ dpkg -i /controller/keystone/*.deb在一個控制節點操…

帆軟 BI 從入門到實戰全攻略(一):安裝激活與添加數據

一、帆軟 BI 產品概述? 在當今大數據時代&#xff0c;數據分析與可視化成為企業洞察業務、驅動決策的關鍵利器。帆軟軟件有限公司作為中國專業的大數據 BI 和分析平臺提供商&#xff0c;自 2006 年成立以來&#xff0c;憑借其在商業智能和數據分析領域的深耕細作&#xff0c;…

網絡協議通俗易懂詳解指南

目錄 1. 什么是網絡協議? 1.1 協議的本質 1.2 為什么需要協議? 1.3 協議分層的概念 2. TCP協議詳解 - 可靠的信使 ?? 2.1 TCP是什么? 2.2 TCP的核心特性 ?? 面向連接 ??? 可靠傳輸 ?? 流量控制 2.3 TCP三次握手 - 建立連接 2.4 TCP四次揮手 - 斷開連接…

量子加速器切入 AI 底層架構!能源焦慮時代,ORCA 正在改寫數據中心的計算邏輯

內容來源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨浪味仙 行業動向&#xff1a;2000字丨5分鐘閱讀 人工智能的飛速發展&#xff0c;令計算需求呈現爆炸式增長&#xff0c;也催生出專為 AI 設計的新型計算基礎設施形態——AI…

< 買了個麻煩 (二) 618 京東云--輕量服務器 > “可以為您申請全額退訂呢。“ 工單記錄:可以“全額退款“

事情進展是這樣的&#xff1a; 海外接聽 一分鐘 1-2 元&#xff0c;具體多少要問聯通。 這幾天接電話&#xff0c;有點兒心煩&#xff0c;看見來自 010-86310548 以為是 ICP 備案&#xff0c;結果接起來全是 VPS &#xff08;輕量應用服務器&#xff09;這個工單&#xff0c;就…

接口限頻算法:漏桶算法、令牌桶算法、滑動窗口算法

文章目錄 限頻三大算法對比與選型建議一、漏桶算法&#xff08;Leaky Bucket Algorithm&#xff09;1.核心原理2.實現3.為什么要限制漏桶容量4.優缺點分析 二、令牌桶算法&#xff08;Token Bucket Algorithm&#xff09;1.核心原理2.實現&#xff08;1&#xff09;單機實現&am…

HTML5 盒子模型

1. 盒子模型的概念 2. 邊框&#xff08;border&#xff09; 邊框顏色&#xff08;border-color&#xff09; 邊框粗細&#xff08;border-width&#xff09; 邊框樣式&#xff08;border-style&#xff09; border簡寫&#xff08;border&#xff1a;&#xff09; 3. 外邊距&am…

【Linux】Linux高級I/O

參考博客&#xff1a;https://blog.csdn.net/sjsjnsjnn/article/details/128345976 一、五種IO模型 阻塞式I/O非阻塞式I/OI/O復用&#xff08;多路轉接&#xff09;信號驅動式I/O異步I/O I/O我們并不陌生&#xff0c;簡單的說就是輸入輸出&#xff1b;對于一個輸入操作通常包…

關于界面存在AB測試后UI刷新空白的問題

問題描述&#xff1a; 在同一頁面存在AB面&#xff0c;A和B同時都有一個rv&#xff0c;然后A面的rv填充不了數據&#xff0c;B面的可以。 問題解決&#xff1a; header_task布局里的include_new_gift_sign里有一個和外層一樣id的recyclerview include的標簽的作用是。在infl…

Go 協程(Goroutine)入門與基礎使用

一、什么是協程&#xff08;Goroutine&#xff09;&#xff1f; 簡單來說&#xff0c;協程是由 Go 語言運行時管理的輕量級線程。相比系統線程&#xff0c;它的調度開銷極小&#xff0c;內存占用非常少&#xff08;默認只需 2KB 棧空間&#xff09;。 你可以在一個程序中輕松…

matlab 各種智能優化算法

1. 優化算法相關 蟻群優化算法&#xff08;ACO&#xff09; 蟻群優化算法是一種模擬螞蟻覓食行為的優化技術。以下是一個簡化版的ACO用于解決旅行商問題&#xff08;TSP&#xff09;的MATLAB代碼&#xff1a; function [bestRoute, minDist] acoTsp(distMatrix, numAnts, n…

Hilt -> Android 專屬依賴注入(DI)框架

Hilt 是 Google 基于 Dagger 封裝的 Android 專屬依賴注入&#xff08;DI&#xff09;框架&#xff0c;顯著簡化了依賴管理流程&#xff0c;提升代碼可維護性和可測試性。以下是核心要點及使用指南&#xff1a; dagger2: Dagger 2 原理和使用-CSDN博客 Hilt vs Dagger2&…