返回对象的const副本时发出警告

时间:2015-09-24 06:47:46

标签: c++ gcc clang compiler-warnings

查看下面的函数声明:

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副本有些困惑。这是一个很少保护的例子。依靠调用代码不进行复制是设计中的一大缺陷。它根本不健壮。我的问题仍然存在,我怎么能得到关于这个的警告,而不是我收到警告时应该怎么做。也许我会忽略它:)

Live demo

1 个答案:

答案 0 :(得分:0)

这对于许多类型的对象都有意义,并且当模板类型扩展为const时可以出现。对于一个类对象,一个comst和一个非const对象之间的区别可能远非微不足道!考虑返回const和非const副本之间的区别,例如,包含全局数据的getter和setter的对象。如果const,它只能获得。如果不是......

请记住,这可以防止自己摔倒在地,而不是故意绕过类型系统。

可以写入const引用,但你明确地不认为这是一种错字。