c++ 如何初始化一个类的静态常量成员,它与类具有相同的类型?[副本]

whhtz7ly  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(98)

此问题已在此处有答案

How to initialize a static const member in C++?(5个答案)
4天前关闭。
我有一个类,它的静态常量成员与类的类型相同。我得到一个错误,类尚未完成。

#include<iostream>

class Color
{
public:
    Color(unsigned char red, unsigned char green, unsigned char blue)
    : Red(red), Green(green), Blue(blue)
    {
    }
    
    Color(){}
    
    unsigned char Red, Green, Blue;
    
    static const inline Color White{255, 255, 255};
};

int main()
{
    std::cout << Color::White.Red;
}

或者我可以让它们成为非常量,但这样容易出错,因为它可以被改变。如果我把它们设为const,那么它们必须在声明的地方定义。
我想在这种情况下,需要静态构造函数。

bvpmtnay

bvpmtnay1#

你可以使用“工厂”静态方法。这很好地推广到了更复杂的用例,并且还有一个额外的好处,那就是可以在常量表达式中使用White

#include <iostream>

class Color
{
  public:
    unsigned char red, green, blue;

    constexpr Color(unsigned char _red, unsigned char _green, unsigned char _blue)
        : red(_red), green(_green), blue(_blue) {}
    
    constexpr static Color White() { 
        return {255, 255, 255}; 
    };
};

int main()
{
    constexpr auto red_value = Color::White().red;
    std::cout << static_cast<int>(red_value) << '\n';
}
xxb16uws

xxb16uws2#

在类外部定义变量:

class Color
{
    // ...
    static const Color White;
};

const Color Color::White{255, 255, 255};

相关问题