C++ 初始化向量成员变量的正确方法 //方法一 类名 { 公众: ClassName():m_vecInts(){} 私人: std::向量m_向量; } //方法二 类名 { 公众: ClassName(){}//什么也不做 私人: std::向量m_向量; }

C++ 初始化向量成员变量的正确方法 //方法一 类名 { 公众: ClassName():m_vecInts(){} 私人: std::向量m_向量; } //方法二 类名 { 公众: ClassName(){}//什么也不做 私人: std::向量m_向量; },c++,C++,问题>初始化类的vector成员变量的正确方法是什么? 我们必须初始化它吗?您不必显式地初始化它,它将在您创建类的实例时创建。这取决于具体情况。如果你想要一个大小为0的向量,那么你不需要做任何事情。如果您想要大小为42s的N向量填充,请使用构造函数初始值设定项列表: // Method One class ClassName { public: ClassName() : m_vecInts() {} private: std::vector<int> m_vecI

问题>初始化类的vector成员变量的正确方法是什么?
我们必须初始化它吗?

您不必显式地初始化它,它将在您创建类的实例时创建。

这取决于具体情况。如果你想要一个大小为0的向量,那么你不需要做任何事情。如果您想要大小为42s的N向量填充,请使用构造函数初始值设定项列表:

// Method One
class ClassName
{
public:
    ClassName() : m_vecInts() {}

private:
    std::vector<int> m_vecInts;
}

// Method Two
class ClassName
{
public:
    ClassName() {} // do nothing

private:
    std::vector<int> m_vecInts;
}

默认初始化在三种情况下执行:

  • 在没有初始值设定项的情况下声明具有自动存储持续时间的变量时
  • 由不带初始值设定项的新表达式创建具有动态存储持续时间的对象时
  • 当构造函数初始值设定项列表中未提及基类或非静态数据成员且该构造函数被称为
  • 默认初始化的效果是:

    • 如果T是类类型,则调用默认构造函数为新对象提供初始值
    • 如果T是数组类型,则数组的每个元素都默认初始化
    • 否则,什么也不做

    由于
    std::vector
    是一种类类型,因此调用其默认构造函数。因此不需要手动初始化。

    由于C++11,您还可以直接在类声明中使用非静态成员:

    类名
    {
    公众:
    类名(){}
    私人:
    std::vector m_vecInts{1,2,3};//or={1,2,3}
    }
    
    不,除非你想指定一个初始容量(或者初始化它的内容,你可以用C++11中的初始化器列表或者boost的
    列表来初始化它)。两种方式的向量都是使用默认构造函数构造的,但是如果你在初始化器列表中根本没有提到它的话,最好是1,将调用默认构造函数。否则,调用合适的构造函数(例如,可能您希望它有100个默认构造元素)
    常数T2;//好的,调用用户提供的默认ctor//t2.mem是默认初始化的
    。t2.mem不是默认初始化的@q0987:
    mem
    是一个
    int
    ,它既不是类,也不是数组类型,因此不会得到默认初始化。cppreference上提供的代码几乎总是在C++11标准下进行验证,但我不知道这是否会改变给定情况下的任何内容(给定
    const
    限定符)。然而,即使这个例子不一致,甚至可能是错误的,解释和标准本身也不一致。当向量的大小非常大时,比如说当我想要一个40个元素的向量,所有元素都初始化为100时,有没有其他语法可以帮上忙?
    ClassName() : m_vecInts(N, 42) {}