抱歉,标题不明确。
我在C ++ 14代码库中有一个类,我们将其称为HugeClass
。 HugeClass
是LiteralType,因此至少具有一个constexpr ctor:
class HugeClass {
public:
constexpr HugeClass() : member{0}
{
}
// Over 9k LOC
...
private:
int member;
};
一切都很好。但不是。
lang整洁的加-std=c++14
吠声:
member initializer 'member' does not name a non-static data member or base class
。
对于重新排序的字段不会发生这种情况:
class HugeClass {
private:
int member;
public:
...
};
也不与-std=c++17
一起使用。
删除constexpr很奇怪。
答案 0 :(得分:1)
C ++ 14§7.1.5(“ constexpr说明符”)列出了constexpr
构造函数的一系列要求。它们都不与您的代码矛盾。相反,您可以在(4.9)下的本节中找到代码作为示例:
struct Length {
constexpr explicit Length(int i = 0) : val(i) { }
private:
int val;
};