哪个更好:
bool MyClass::someQuery() const;
const bool MyClass::someQuery() const;
我一直在使用
const bool
,因为我确信我记得听说过它是“int
的作用”(例如比较运算符),但我在任何地方都找不到这方面的证据,主要是因为它很困难Google 和 IntelliSense 没有提供任何帮助;)任何人都可以证实这一点吗?
对我来说,返回
const
值(这不仅仅是关于 bool
)更有意义;它将防止临时变量被修改,这几乎总是程序员的错误。我只是想要一些东西来支持这一点,这样我就可以向我的同事们颂扬返回const
的价值观:)
这种情况就是
const
没有增加任何价值,而是夸大了代码并使读者思考更多。这有什么意义const
?调用者可以将值复制到某个非常量变量中,然后用它做任何他想做的事情。
所以你知道这是对的,你只是在追求权威之声? 防止临时变量的意外修改非常有价值。一般来说,你应该声明尽可能多的东西
const
,它可以保护你免受各种事故的影响,并为优化器提供有用的提示。
您有 Scott Meyers 的《Effective C++》吗?将他们指向第 3 项(第三版第 18 页);)
它给出了
的例子class Rational {...};
const Rational operator* (const Rational& lhs, const Rational& rhs );
if( (a * b) = c ) // declaring operator *'s return value const causes error to be caught by compiler
if((a*b) = c)
都不会编译内置类型,因此无论我们谈论内置类型(您的问题要求bool
)还是用户定义类型,这里都非常相关。
对于内置类型来说它根本没有意义,所以不应该使用它。对于用户定义的类型,我站在 jalf 的阵营:如果调用者想要修改返回的对象怎么办?
我不相信
if((a*b) = c)
是返回 const 用户定义类型的一个很好的论据,因为我不记得上次看到编译器not对此发出警告是什么时候。
更具体一点,只有“对象”可以是 const。 C++ 标准对“对象”的定义包括左值引用的所有内容(“有名称”)和类类型临时变量。布尔返回值是非类类型的右值,这就是为什么符合标准的编译器在这种情况下将忽略“const”。正如其他人已经说过的,在这种情况下它是没有用的。
当您返回对成员变量的引用时,将其设置为 const 是有意义的。这里你返回一个副本,因此不需要 const。
const
修饰符仅用于通过引用返回的返回类型(作为引用const SomeObject&
或通过指针
const SomeObject*
),因此调用者将无法通过引用修改对象/指针。原始类型是按值返回的,这意味着调用者收到的是对象的副本,而不是对象本身。 因此,
const
不太适合返回值类型。由于副本不在被调用函数的控制范围内,因此被调用函数不应向调用者指示它不能更改。
const bool
和关联函数,例如使用
bool
或
decltype
作为返回类型,都没有什么区别。
result_of
,您可以声明一个与某个函数的返回值具有相同类型的变量,因此 const
在这种情况下实际上会产生效果。
bool
。无所谓的原因是无论如何你都不能调用非常量成员函数;
bool
不是类或结构。
const bool func();
bool f = func();
0 个错误,0 个警告。除了不必要的代码膨胀之外,您还完成了什么?