使用静态向量作为存储

时间:2014-10-22 02:10:10

标签: c++ vector static

我的程序有一个用于存储colorsuser response的枚举。现在我需要保留RGBCYMK值以及颜色。所以这不能用enum,

enum COLOR
{
    RED = 'R',
    GREEN = 'G',
    BLUE = 'B',
    YELLOW = 'Y',
    MAGENTA = 'M'
};

所以我打算为此目的使用struct的静态数组。我使用静态因为

  1. 这些值永远不会在程序中更改
  2. 当其他类创建和销毁此类对象时,避免多次创建向量。

    struct Color
    {
     char user_responce;
     std::string rgb_code;
     std::string cymk_code;
    };
    
    static std::vector<Color> colors;
    colors.push_back('R', "FF0000", "30 - 96 - 76 - 26");
    

    但在阅读这篇文章之后Is using a lot of static methods a bad thing?我对自己的行为感到不满。 这是一个“不安全”的静态吗?还有其他建议吗?

1 个答案:

答案 0 :(得分:2)

如果值永远不会改变,那么你可以这样做:

static const std::vector<Colour> colors = 
{   { 'R', "FFFF00", "blabla" }
,   { 'S', "00FF00", "foo" }
,   { 'T', "0f3033", "burnt sienna" }
};

我个人会在这里使用C风格的数组和指向char的指针;一般来说这些都是坏主意,但对于静态变量,它可以消除由于访问尚未调用其构造函数的对象而导致未定义行为的风险。