首頁 >後端開發 >C++ >為什麼透過引用傳遞靜態常數 Int 會導致 C 中的「未定義引用」錯誤?

為什麼透過引用傳遞靜態常數 Int 會導致 C 中的「未定義引用」錯誤?

Linda Hamilton
Linda Hamilton原創
2024-10-29 19:02:02771瀏覽

Why Does Passing a Static Const Int by Reference Cause an

對Static Const Int 的未定義引用:解決方案

在最近的程式設計場景中,出現了編譯錯誤,並顯示訊息「對靜態常數的未定義引用」 '酒吧::kConst'」。此錯誤源自以下程式碼片段:

class Bar
{
public:
   static const int kConst = 1;
   void func()
   {
      foo(kConst);           // Error-prone line
   }
};

出現該錯誤是因為靜態常數成員「kConst」未定義。通常,編譯器應該在編譯時進行必要的替換。此問題,可以採用以下修改:

此方法強制編譯器建立一個臨時「int」並傳遞對其的引用,從而允許成功編譯。是有意的,如C 標準中所指定的( 9.4.2/4),其中規定當常數整數類型的靜態資料成員具有常數初始值設定項時,它可以出現在整型常數表達式中。但是,如果在程式中使用,它仍然必須在命名空間範圍內定義。 」。這意味著編譯器有義務強制存在「kConst」定義。
foo(static_cast<int>(kConst));

雖然GCC 有時可能在某些情況下忽略此要求,但通常建議遵守標準並避免使用引用發送或獲取不存在對象的地址。

以上是為什麼透過引用傳遞靜態常數 Int 會導致 C 中的「未定義引用」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn