c++ - 如何在一个表达式中生成并返回结果?
问题描述
我有一个class
类似的:
class Frac
{
int numer;
int denom;
public:
Frac &simplify();
Frac(int &&num, int &&den) : numer { num }, denom { den }
{
simplify();
}
Frac operator*(const int &rhs)
{
Frac result = { numer * rhs, denom };
return result.simplify();
}
}
但是,我不喜欢result
在重载时使用中间体*
。
理想情况下,我想做这样的事情:
Frac operator*(const int &rhs)
{
return { numer * rhs, denom }.simplify();
}
但这不起作用;它构造 astd::initializer_list<int>
而不是 aFrac
并且您不能调用成员函数。在 CI 中可以使用复合文字来做到这一点,但这些在标准 C++ 中不可用。
如何在一个表达式中生成并返回结果?
解决方案
由于您已经simplify()
在构造函数中调用,因此您只需要调用构造函数本身,并返回它创建的对象:
Frac operator*(const int &rhs)
{
return Frac(numer * rhs, denom);
}
如果您稍后决定将构造函数更新为不再调用simplify()
,您仍然可以simplify()
显式调用通过调用构造函数创建的对象:
Frac operator*(const int &rhs)
{
return Frac(numer * rhs, denom).simplify();
}
推荐阅读
- python - 我在 python 中使用“除外”代码时遇到问题
- wordpress - wordpress 如何知道我是使用用户名还是电子邮件登录?
- google-bigquery - 在 BigQuery SQL 中获得不同的计数和每行重复
- c# - 存储 blob 复制操作期间出错 - 在实体的当前状态下不允许请求的操作
- java - 构造函数不能应用于给定类型
- c++ - 为什么它会产生“未知信号 11”?
- javascript - ReactJS:提交表单 onChange
- codeigniter - 用户在注册后没有重定向到页面,但在 codeigniter 中注册成功
- python - python类中“自我”的目的是什么
- c++ - 正确执行while循环直到输入“0”以停止循环?