C++ 初始化向量成员变量的正确方法 //方法一 类名 { 公众: ClassName():m_vecInts(){} 私人: std::向量m_向量; } //方法二 类名 { 公众: ClassName(){}//什么也不做 私人: std::向量m_向量; }
问题>初始化类的vector成员变量的正确方法是什么?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
我们必须初始化它吗?您不必显式地初始化它,它将在您创建类的实例时创建。这取决于具体情况。如果你想要一个大小为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) {}