struct rgb_color {
constexpr rgb_color(std::uint8_t nr, std::uint8_t ng, std::uint8_t nb) :
r(nr), g(ng), b(nb) { }
std::uint8_t r; // red
std::uint8_t g; // green
std::uint8_t b; // blue
constexpr static rgb_color black = rgb_color(0, 0, 0);
constexpr static rgb_color white = rgb_color(255, 255, 255);
};
Các constexpr static
định nghĩa liên tục thất bại trong việc biên dịch:Struct là phi nghĩa đen loại
constexpr variable cannot have non-literal type 'const rgb_color'
Tuy nhiên theo http://en.cppreference.com/w/cpp/concept/LiteralType, const rgb_color
nên là một loại đen, bởi vì nó chỉ có loại đen như các thành viên dữ liệu (std::uint8_t
) và nhà xây dựng constexpr
.
Tại sao mã không biên dịch?
Ngoài ra, nó là cần thiết để xác định constexpr static
thành viên trong một tập tin .cc
, như
constexpr rgb_color rgb_color::black;
Nó có hoạt động nếu bạn làm 'constexpr static rgb_color black (0, 0, 0);'? – Sean
Không: http://coliru.stacked-crooked.com/a/f7915407bb464659 – tmlen
Liên kết bạn đưa ra có đề xuất: "có thể cv đủ điều kiện (C++ 17)". Trình biên dịch của bạn có thể được phát bởi các quy tắc C++ 14 ở đây. – MSalters