return 语句后跟初始值设定项列表
return statement followed by initializer list
当我阅读C++(第 3 版)时,我遇到了以下使用 complex
类的示例(第 4.2 节)。
在复杂类定义中:
complex& operator+=(complex z)
{
re += z.re;
im += z.im;
return *this;
}
与类定义分开定义:
complex operator+(complex a, complex b)
{
return a += b;
}
complex operator-(complex a)
{
return { -a.real(), -a.imag() };
} // unary -
有人可以帮助我理解为什么在
operator+
实现中,作者调用operator+=
,这会更改进行调用的复数对象的值?如果我要评估快速a+b
,我会期望值 a 被改变吗?另外,对于
operator-
的情况,我对以下陈述感到困惑:return { -a.real(), -a.imag() };
作者是否在 return 语句后使用初始值设定项列表?如果是这样,是否可以在不指定要初始化的对象的名称的情况下完成?
提前谢谢。
operator+
委托给operator+=
以避免维护两个函数定义。operator+
参数未被修改,因为运算符通过按值而不是按引用接受参数来制作参数的本地副本。因此,参数在调用方的上下文中保持不变。
以下声明
return { -a.real(), -a.imag() };
使用大括号初始化列表的复制列表初始化,使用获取实值和虚值的构造函数构造complex
对象。这是一个 C++11 的补充,并且工作是因为有问题的std::complex
构造函数不是explicit
。
这在 [dcl.init.list]/3 和 [over.match.list]/1 中进行了解释。任何采用std::initializer_list<T>
参数的std::complex
构造函数都将首先被考虑。如果不存在这样的构造函数(std::complex
就是这种情况),或者如果构造函数对于大括号 init-list 中的参数类型不可行,则将枚举std::complex
的其他构造函数,并通过重载解析选择最佳匹配。
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 当返回语句时,逗号运算符、大括号初始化列表和 std::unique_ptr 组合在一起
- 如何在列表初始化中放置额外的语句?
- 卡在 if 语句中,以检查列表中的数字
- 我如何为内部列表提供基于范围的语句?(C )
- 将Typedef语句放入类链接链接列表中的C 错误
- return 语句后跟初始值设定项列表
- using语句可以出现在构造函数初始化列表中吗?