c++ - g++ 编译器忽略 const 返回类型

标签 c++ g++ constants return-type

我是这类人中的一员,他们认为“如果它不能改变,那么它应该是 const”。也许我通过这样做将 const 发挥到了极致,但是,由于我的函数返回类型通常不应该改变,所以我声明我所有的函数都返回 const。 (当然,除非他们返回 void - 通过 const void 返回是否有意义?)

您可能认为我有点疯狂,我的键盘打字我不需要,或者返回 const 是有意义的,因为您自己已经使用过它。或者,也许您没有考虑这些事情,在这种情况下我猜错了。

我已经使用 g++4.8 编译了我的程序,并启用了编译器开关 -Wextra。这样做时,g++ 会警告我它会忽略我的返回语句中的每一个。它们都不是通过 const 返回的。这显然在编译后没有区别,但我想知道是否有一种方法可以强制 g++ 编译并注意我的 const 返回类型。

更重要的是,为什么 g++ 忽略 const —— 还是仅仅因为我疯了,g++ 认为返回 const 是不必要的?

根据要求:示例...

内联 const bool collisionTest(...) { ... }

警告:函数返回类型忽略类型限定符

最佳答案

它不会忽略它,如果你按值返回基本类型,它就没用了。

按值返回意味着无论如何都不能修改返回的内容,因为它是右值。 const 是多余的。

参见:

int foo();

您将如何修改返回?

foo() = 4;

会产生编译错误。

如果你返回一个引用,const 确实很重要:

int& foo();
const int& goo();

foo() = 42;  //okay 
goo() = 42;  //error

关于c++ - g++ 编译器忽略 const 返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18560737/

相关文章:

c++ - 使用信号设置值在 Qt 中的行为不符合预期

c++ - 如何在 C++ 中用鼠标移动对象?

c++ - 如何使用eclipse构建C++应用程序

iterator - D 中 const 集合的迭代

c++ - 常量的C++最佳做法

c++ - 是否可以声明一个 constexpr 指针而不是指向 constexpr 的指针?

c++ - 相当奇怪的 clang 问题

g++ - i386-mingw32-g++ : error trying to exec 'cc1plus' : execvp: No such file or directory

ios - 当我们使用VIPER架构时如何创建常量?

c++ - 基于范围的for循环通过非常量文字c++