为什么我们需要创建一个单参数构造函数来使用临时的无名称对象

Why do we need to create a one-arg constructor in order to use temporary nameless objects?

本文关键字:对象 无名 构造函数 创建 我们 为什么 单参数 一个 参数      更新时间:2023-10-16

好吧,所以我在研究运算符重载中的无名临时对象,而不是写:

Classname temp;
temp.variable=variable;
return temp;

你可以这样做:

return Classname(variable);

但要做到这一点,您还需要创建一个单参数构造函数,如下所示:

Classname(int c): variable(c)
{ }

我的问题是…为什么我们需要创建这个单参数构造函数?我一直在网上搜索,找不到任何原因。所以,我真的需要你们的帮助。谢谢

您不必这样做。您可以使用聚合初始化:

struct Classname {
int variable;
};
// ...
return Classname{42};

这创建了类的一个对象,该对象的唯一非静态成员用值42初始化。

聚合初始化受到一些限制。逻辑是,只有在某种意义上类似于C结构的类型——即没有不变量的数据分组——才应该是合格的。如果您通过添加构造函数或通过访问控制隐藏一些成员来使类型更加复杂,那么您的意图可能是,在不经过一些构造函数或一些setter方法的情况下,不应直接初始化成员。因此,在这种情况下,这是不允许的;相反,必须定义一个适当的构造函数。