簡體   English   中英

為什么返回類型上的“const”限定符對標有 __forceinline/inline 的函數沒有影響?

[英]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無關,並且不言自明。

函數返回類型的constvolatile限定符,當函數按值返回時,沒有意義,因為從概念上講,返回的值要么被丟棄,要么用作調用方初始化對象的臨時值。 該對象的const / volatile限定在調用者的管轄范圍內。 例如,從返回const int的函數調用初始化可變int變量是完全合法的。

為什么返回類型的“const”限定符沒有效果......

因為該函數返回一個純右值。 intbool類型的 const 和非常量純右值之間沒有區別。 限定符只對類類型的純右值產生影響(即使如此,返回一個 const 值也是非常規的)。

編譯器很有幫助,並會就此向您發出警告。 在編寫該聲明時很可能犯了一個錯誤,因為無意義的限定詞是沒有用的。 曾經寫過它的人可能打算寫一些其他有意義的東西。

顯然,編譯器已被告知將警告視為錯誤。

...在用 __forceinline/inline 標記的函數上?

這同樣適用於沒有用那些標記的函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM