![](/img/trans.png)
[英]Why does libcxx apply __forceinline or the GCC equivalent to its already hidden inline functions?
[英]Why does the 'const' qualifier on return type have no effect on functions that are marked with __forceinline/inline?
我正在用 clang 編譯我的 C++ 代碼,並且想知道編譯器錯誤背后的含義:
error : 'const' type qualifier on return type has no effect
以下語法會產生錯誤:
inline const int foo();
__forceinline const bool bar();
這實際上是一個警告,通過命令行開關將其提升為錯誤。 它與inline
或__forceinline
無關,並且不言自明。
函數返回類型的const
和volatile
限定符,當函數按值返回時,沒有意義,因為從概念上講,返回的值要么被丟棄,要么用作調用方初始化對象的臨時值。 該對象的const
/ volatile
限定在調用者的管轄范圍內。 例如,從返回const int
的函數調用初始化可變int
變量是完全合法的。
為什么返回類型的“const”限定符沒有效果......
因為該函數返回一個純右值。 int
或bool
類型的 const 和非常量純右值之間沒有區別。 限定符只對類類型的純右值產生影響(即使如此,返回一個 const 值也是非常規的)。
編譯器很有幫助,並會就此向您發出警告。 在編寫該聲明時很可能犯了一個錯誤,因為無意義的限定詞是沒有用的。 曾經寫過它的人可能打算寫一些其他有意義的東西。
顯然,編譯器已被告知將警告視為錯誤。
...在用 __forceinline/inline 標記的函數上?
這同樣適用於沒有用那些標記的函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.