初始化成员Vector值

C++: Initializing member Vector values

本文关键字:Vector 成员 初始化      更新时间:2023-10-16

我是c++新手。我知道使用初始化列表来初始化成员变量总是更好,而不是在构造函数体中这样做…

例如,

class MyClass {
    MyClass(int Value) : m_Value(Value) { }
private:
    int m_Value;
}

优于

class MyClass {
    MyClass(int Value) { 
        m_Value = Value;
    }
private:
    int m_Value;
}

,因为后者初始化变量两次。


然而,我想知道在初始化成员向量时应该做些什么。

假设我有一个这样的类:

class MyClass {
    MyClass();
private:
    std::vector<std::string> m_StringVector;
}

我想初始化成员vector的值,因为vector的内容总是相同的(常量),无论实例如何…

例如,我知道名为"signs"的成员向量总是有3个成员:"正"、"负"、"零"。"

所以我想这样做:

class MyClass {
    MyClass() : signs({"positive", "negative", "zero"}) { }
private:
    std::vector<std::string> signs;
}

首先,这可能吗?

第二,如果可能的话,这是一种推荐的做法吗?

谢谢

这是可能的*您可以省略():

MyClass() : signs{"positive", "negative", "zero"} { }

,但你也可以在声明点进行初始化:

std::vector<std::string> signs{"positive", "negative", "zero"};

这样做的好处是,在所有没有显式初始化vector的构造函数中,都以相同的方式初始化vector。

现在,如果vector的元素总是相同的,并且如果vector不会被修改,你可以考虑使它成为static的成员,这样你就有一个单独的实例被MyClass的所有实例共享。


*除非你坚持使用c++ 11之前的编译器