C++11 大括号/聚合初始化.什么时候使用它?
C++11 brace/aggregate initialization. When to use it?
在阅读了C++11和围绕它的常见准则之后,我经常阅读有关如何使用类内初始化和聚合初始化的信息。
下面是一个似乎是"旧"做事方式的例子:
class Example
{
public:
// Set "m_x" to "x", "m_y" gets set to the default value of 5
Example(int x) : m_x(x), m_y(5)
{
}
private:
int m_x;
int m_y;
};
据我了解,这就是人们现在推荐的:
class Example
{
public:
Example(int x) : m_x{x}
{
}
private:
int m_x{0}; // Supposedly {} works too? I guess this would
// only be necessary if I had another constructor
// taking in 0 arguments, so "m_x" doesn't go uninitialized
int m_y{5};
};
我的问题是:这对指针、引用和一些 STL 类有何影响?这些的最佳实践是什么?他们只是用{}
初始化吗?此外,即使构造函数初始化了变量,我是否应该这样做?(即编写m_x{}
,即使它被构造函数设置为其他内容)
谢谢。
可以使用类内成员初始化和委派构造函数来减少代码重复。请参阅我对相关问题的回答:使用 C++ 11 进行重构。
指针类型的成员变量可以使用类内成员初始化初始化为nullptr
。使用类内成员初始化初始化指向其他内容的指针似乎没有用。您必须根据您的特定用例来判断它。
引用类型的成员变量很可能需要使用初始值设定项列表语法进行初始化。 使用类内成员初始化初始化对其他内容的引用似乎没有用。您必须根据您的特定用例来判断它。
来自标准库的类...当然,您可以使用类内成员初始化来初始化容器类型。下面的类是完全可以的。
struct Foo
{
std::vector<int> ar = {20};
};
相关文章:
- 未初始化的变量有什么危险
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 不同的类或结构初始化方法之间的性能差异是什么?
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- 静态初始化的反义词是什么?
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了
- 初始化不是整数的巨大常量多维数组的最佳方法是什么?
- 使用 const char* 初始化 const ref 字符串成员时幕后会发生什么
- 初始化类成员的更好做法是什么?
- C++初始化的结果是什么?
- 如果在 C++ 构造函数中以错误的顺序初始化对象数据,会发生什么类型的错误
- 这些初始化之间有什么区别?
- 构造函数中没有参数的对象类成员按什么顺序初始化?
- C++11 大括号/聚合初始化.什么时候使用它?
- 这是什么字符串初始化?
- 我们什么时候应该使用括号 ( ) 与初始值设定项 { } 语法来初始化 C++11 中的对象
- 什么时候初始化thread_local全局变量?
- 使用什么方法初始化成员变量?
- 我什么时候用cocos2d-x中的参数初始化自定义创建函数中的变量?