添加额外的常数会导致编译器错误

时间:2019-05-31 13:42:51

标签: c++

这在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不好?

2 个答案:

答案 0 :(得分:7)

因为像这样按值返回const都没有区别。

例如:

const int GetMyInt()
{
  int k = 42;
  return k;
}

//later..
int ret = GetMyInt();
// modify ret.

因为从GetMyInt返回的值无论如何都将被复制到ret中(不考虑(N)RVO),因此GetMyInt返回const没什么区别。

通常这是一个警告,因为它是多余的代码,但是-Werror会将每个警告变成一个错误,因此就可以了。

答案 1 :(得分:5)

const限定符在此位置无效,因为返回的值是非类类型的prvalue,因此无论如何都不能修改。

请注意,编译器消息中显示-Werror=,这意味着它通常是警告(因此代码没有错,但值得警告)。您的编译设置已将其转换为错误。