为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
Why do we need to create a one-arg constructor in order to use temporary nameless objects?
好吧,所以我在研究运算符重载中的无名临时对象,而不是写:
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方法的情况下,不应直接初始化成员。因此,在这种情况下,这是不允许的;相反,必须定义一个适当的构造函数。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 如何创建抽象类的无名派生类的对象