首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 引用返回值深度解析:為什麼 c = change(1) 不修改數組元素

     編輯:程式設計綜合問答

代碼還原

double array[5] = {100.1, 100.2, 100.3, 100.4, 100.5};
double &change(int i) { return array[i]; }

void test() {
    change(2) = 3.14;   // ✅ 修改 array[2]
    change(3) = -99.99; // ✅ 修改 array[3]
    double c = change(1); // ❌ c 是拷貝,非引用
    c = 3.5;            // 僅修改局部變量 c
}

本質區別

表達式類型行為
change(2) = 3.14左值引用直接綁定 array[2],賦值透傳
double c = change(1)值初始化調用拷貝構造,**斷開引用鏈**

內存模型圖解

change(2) = 3.14  等價於:
double &temp = array[2]; // temp 是 array[2] 別名
temp = 3.14;             // 直接改 array[2]

double c = change(1) 等價於:
double &temp = array[1]; // temp 綁定 array[1]
double c = temp;         // c 開闢新空間,複製值
c = 3.5;                 // 僅改 c,array[1] 不變

引用核心規則

  1. 引用**不是對象**,不佔內存,本質是別名
  2. 初始化後**不可重新綁定**
  3. 作為返回值時,返回的是被引用對象的**別名資格**
  4. 用於初始化**非引用變量**時發生**值拷貝**

正確修改模式

// 方式 1:返回引用並直接賦值
change(1) = 3.5; // ✅ 直接改 array[1]

// 方式 2:用引用接收
double &ref = change(1);
ref = 3.5; // ✅ 同樣改 array[1]
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved