代码如下(示例):
struct CircleStruct
{
int x, y;
double radius;
};
class CircleClass
{
public:
CircleClass(){}
CircleClass(int x, int y, double radius)
:m_x { x }, m_y { y }, m_radius { radius } {}
private:
int m_x, m_y;
double m_radius;
};
统一初始化
CircleStruct c1 { 5, 5, 2.5 };
CircleClass c2 {};//默认构造函数
CircleClass c3 { 5, 5, 2.5 };
统一初始化并不局限于结构和类,它还可以用于初始c++中任何内容。
例如:
int e {};// e == 0;
int a { 5 };
std::array arr { 3, 5 ,7 };
int *myArray = new int[]{ 0, 1, 2, 3 }//c++20可以省略数组大小4 -> int *myArray = new int[4]{ 0, 1, 2, 3 }
//构造函数初始化器中初始化成员数组
class MyClass
{
public:
MyClass() : m_array { 0, 1, 2, 3 }
private:
int m_array[4]
};
使用统一初始化的一个有点就是可以阻止窄化,当使用旧风格的赋值语法初始化变量时,C++隐式地执行窄化。例如:
void func(int i){}
int main()
{
int x = 3.14;//自动截断为3
func(3.14);//将3.14自动截断为3
}
使用统一初始化
void func(int i){}
int main()
{
int x = { 3.14 };//编译器会报错
func({ 3.14 });//编译器会报错
}