这在GCC 8.2上可以正常编译:
class M
{
public:
const Pointer* getPointer() const {return _ptr;}
private:
Pointer* _ptr{nullptr};
};
但是当我向函数添加另一个const时:
class M
{
public:
const Pointer* const getPointer() const {return _ptr;}
private:
Pointer* _ptr{nullptr};
};
我收到编译器错误:
error: type qualifiers ignored on function return type [-Werror=ignored-qualifiers]
为什么不让我添加额外的常数?从什么时候开始额外的const不好?
因为const
像这样按值返回值对于带或不带都没有区别。
例如:
const int GetMyInt()
{
int k = 42;
return k;
}
//later..
int ret = GetMyInt();
// modify ret.
因为无论如何,返回的值GetMyInt
都将被复制到其中ret
(不考虑(N)RVO),因此具有GetMyInt
返回值const
没有区别。
通常,这是一个警告,因为它是多余的代码,但是-Werror
将每个警告变成错误,因此就可以了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句