[英]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.