我正在学习 C++ 中的类和 OOP 的一些基本知识。据我了解,初始化变量的首选现代方法是使用统一初始化。
在下面的简单类头示例中,使用统一初始化来初始化 3 个数据成员(长度、宽度和高度)。
为了保持一致性,我认为在构造函数声明中设置默认值时使用统一初始化可能是个好主意,但这不起作用,编译器(Debian Stretch 上的 gcc 6.3)会生成错误。从我所看到的来看,编译器认为大括号 {} 是构造函数定义主体的开始(显然不是,因为尚未添加右括号“)”)。
我承认这行不通,但出于好奇,有什么原因吗?我希望与我的代码保持一致,并尽可能使用统一的初始化。
谢谢。
#ifndef BOX_H
#define BOX_H
class Box
{
private:
double length {1.0};
double width {1.0};
double height {1.0};
public:
//constructor
Box(double l = 1.0, double w = 1.0, double h = 1.0); //ok
//Box(double l {1.0}, double w {1.0}, double h {1.0}); //Error
double volume();
};
#endif
Run Code Online (Sandbox Code Playgroud)
编辑...感谢到目前为止的评论,但我不确定我是否理解为什么不能对默认参数使用统一初始化的原因。有人可以指点我一些标准的 C++ 文档吗?
例如,采用下面的基本程序,可以使用统一初始化将n初始化为 5 ,但是不能像这样在函数头中将x初始化为默认参数(我使用带有 -std 的 gcc 6.3 …