【发布时间】:2020-06-29 14:29:03
【问题描述】:
所以,我有以下课程:
typedef double decimal;
class Ratio {
int num, den;
decimal val;
public:
Ratio() { num = 1, den = 1, val = (decimal)num / den; }
Ratio update(int a, int b) {
num *= a, den *= b;
val = (decimal)num / den;
return *this;
}
decimal v(void) { return val; }
friend ostream &operator<<(ostream &out, const Ratio &R) {
return (out << R.num << ':' << R.den);
}
};
当我在输出流中使用成员函数时:
cout<<"R = "<<R.update(2,1)<<"\tvalue = "<<R.v();
其中 R 是 Ratio 类型,首先调用右端的函数,因此它显示更新的比率但未更新的值:
R = 2:1 value = 1
我通过将流分成两部分来克服这个问题:
cout<<"R = "<<R.update(2,1), cout<<"\tvalue = "<<R.v();
所以我“强制” .update() 首先被调用。是否有另一种方法来实现这一点,只使用一个流进行输出?
【问题讨论】:
-
该代码是您正在处理的实际代码还是只是一个玩具示例?
-
评估顺序已在
c++17中更新。使用该标准,您的代码将得到很好的定义。有关详细信息,请参阅cppreference。 -
@super 啊,你是对的!不知何故我没有看到这一点(19)......我会更新我的答案。
-
@florestan 部分代码,省略了大部分与问题无关的代码