一个类不能有自己的静态constexpr成员实例吗?

此代码给我不完整的types错误。 问题是什么? 一个类不允许有自己的静态成员实例吗? 有没有办法达到同样的效果?

struct Size { const unsigned int width; const unsigned int height; static constexpr Size big = { 480, 240 }; static constexpr Size small = { 210, 170 }; private: Size( ) = default; }; 

有没有办法达到同样的效果?

“同样的结果”,你是否特意打算Size::bigSize::smallconstexpr ? 在这种情况下,这可能会足够接近:

 struct Size { const unsigned int width = 0; const unsigned int height = 0; static constexpr Size big() { return Size { 480, 240 }; } static constexpr Size small() { return Size { 210, 170 }; } private: constexpr Size() = default; constexpr Size(int w, int h ) : width(w),height(h){} }; static_assert(Size::big().width == 480,""); static_assert(Size::small().height == 170,""); 

一个类可以有一个相同types的静态成员。 但是,一个类直到定义结束才是不完整的,并且一个对象不能用不完整的types来定义 。 你可以用一个不完整的types来声明一个对象,并在稍后完成的地方定义它(在类之外)。

 struct Size { const unsigned int width; const unsigned int height; static const Size big; static const Size small; private: Size( ) = default; }; const Size Size::big = { 480, 240 }; const Size Size::small = { 210, 170 }; 

看到这里: http : //coliru.stacked-crooked.com/a/f43395e5d08a3952

然而,这对constexpr成员不起作用。