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

C++ const 返回值能賦給非 const 變量的本質解析

     編輯:程式設計疑難解答

代碼示例

const int func() { int j = 8; return j; }
int main() { int i = 5; i = func(); } // 編譯通過

核心解釋

  1. const int func() 表示**返回值是一個右值常量**(prvalue),調用者**不能修改這個臨時對象**;
  2. i = func() 是**用常量值初始化/賦值給變量 i**,屬於「值拷貝」,目標變量 i 本身非 const,完全合法;
  3. 類比:const int c = 10; int x = c; 同理合法——常量值賦給非常量變量,只讀性質不傳遞給目標對象。

易混淆場景對比

代碼合法性原因
const int& ref = func();✅const 左值引用可綁定右值,延長生命周期
int& ref = func();❌非 const 左值引用不能綁定右值
const int* p = &func();❌不能取右值地址
int x = func();✅值拷貝,本文場景

最佳實踐

  • 返回內置類型(int、double 等)時,**不要加 const** —— 無意義,C++11 起甚至會被忽略;
  • 返回**用戶定義類型**(Class/Struct)時,若不想允許 func().mutatingMethod(),可返回 const T;
  • 現代 C++ 推薦:返回值直接按值返回,依賴 RVO/移動語義,無需額外 const 修飾。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved