// 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;
}
Run Code Online (Sandbox Code Playgroud)
问题>初始化类的向量成员变量的正确方法是什么?我们是否必须初始化它?
Zet*_*eta 25
请参见http://en.cppreference.com/w/cpp/language/default_initialization
默认初始化在以下三种情况下执行:
- 声明自动存储持续时间的变量时没有初始值设定项
- 当具有动态存储持续时间的对象由没有初始化程序的new-expression创建时
- 在构造函数初始值设定项列表中未提及基类或非静态数据成员且调用该构造函数时.
默认初始化的效果是:
- 如果T是类类型,则调用默认构造函数以提供新对象的初始值.
- 如果T是数组类型,则数组的每个元素都是默认初始化的.
- 否则,什么也没做.
由于std::vector是类类型,因此调用其默认构造函数.因此不需要手动初始化.
jua*_*nza 20
这取决于.如果你想要一个0号向量,那么你不需要做任何事情.如果你想要一个大小为N的向量填充42s,那么使用构造函数初始化列表:
ClassName() : m_vecInts(N, 42) {}
Run Code Online (Sandbox Code Playgroud)
从 C++11 开始,您还可以直接在类声明中使用非静态成员的列表初始化:
class ClassName
{
public:
ClassName() {}
private:
std::vector<int> m_vecInts {1, 2, 3}; // or = {1, 2, 3}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49564 次 |
| 最近记录: |