對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中文網其他相關文章!