簡體   English   中英

返回對象的const副本時發出警告

[英]Warn when returning const copy of object

查看下面的函數聲明:

int Foo();        // [1] Ok
const int &Foo(); // [2] Ok
const int Foo();  // [3] Not Ok. Same as [1]. Compiler can warn.

Bar Foo();        // [4] Ok
const Bar &Foo(); // [5] Ok
const Bar Foo();  // [6] Ok, not same as [4] or [5], but more likely a typo then intended design.

是否可以要求Clang和/或GCC警告[6]?

我知道這是合法的,但我認為這不是很有用。 我很確定我們代碼庫中的所有此類聲明都是錯別字,我想在編譯時檢測到它們。

更新: [6]中的const副本似乎有些混亂。 這是這種保護措施很少的示例。 依靠調用代碼不進行復制是設計中的一個大缺陷。 它一點也不健壯。 我的問題仍然存在, 如何獲得有關此警告 ,而不是收到警告時該怎么辦。 也許我會忽略它:)

現場演示

這對於許多類型的對象都是有意義的,並且可以在模板類型擴展為const時出現。 對於一個類對象,一個comst對象和一個非const對象之間的區別可能微不足道! 考慮返回例如包含全局數據的getter和setter的對象的const和非const副本之間的區別。 如果為const ,則只能獲取。 如果不 …。

請記住,這是防止腳被槍殺的保護,而不是故意繞過類型系統的保護。 也可以寫const引用,但是您顯然不認為這是一種錯字。

暫無
暫無

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

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