看看下面的函数声明:
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 对象之间的区别可能远非微不足道!考虑返回 const 和非 const 拷贝之间的区别,例如,包含全局数据的 getter 和 setter 的对象。如果const
,则只能获取。如果不是……
请记住,这是为了防止搬起石头砸自己的脚,而不是为了防止故意规避类型系统。也可以写入 const 引用,但您明确地不认为这是一种打字错误。
关于c++ - 返回对象的 const 拷贝时发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32755035/