' constexpr'非静态成员函数不会隐含“常量”。在C ++ 1y中;添加' const'避免改变行为

时间:2014-04-17 04:12:17

标签: c++11 const clang constexpr c++14

clang ++给出以下警告(见下面的代码):

  

'constexpr'非静态成员函数不会隐式'const'   在C ++ 1y中;添加'const'以避免行为改变

const应该添加到哪里? const constexpr size_t getSize() {再次发出警告:

  返回类型的

'const'类型限定符无效

代码:

constexpr size_t getSize()
{
    return sizeof(header);
}

2 个答案:

答案 0 :(得分:14)

我相信它告诉你,从C ++ 1y 开始,成员函数不能在const对象上调用。

const之后添加getSize(),使其成为const成员函数:

constexpr size_t getsize() const { ... }

答案 1 :(得分:1)

完整的测试用例:

struct S {
  constexpr int getSize();
};

诊断:

tmp.cc:2:17: warning: 'constexpr' non-static member function will not be
        implicitly 'const' in C++1y; add 'const' to avoid a change in
        behavior [-Wconstexpr-not-const]
  constexpr int getSize();
                ^
                          const

特别注意输出的底线。这称为“修复它提示”,并向您显示需要插入的文本(以及插入位置)以解决问题。

(在这种情况下,文本以前导空格开头,使其稍微不那么明确,应该在分号之前插入,而不是之后。)