gpt4 book ai didi

c++ - 为什么这个 C++ 代码片段将一个值分配给一个右值编译?

转载 作者:行者123 更新时间:2023-12-03 10:03:48 24 4
gpt4 key购买 nike

我正在阅读 Effective C++ 的第三版,我很惊讶第 18 页上的一个片段可以编译。这是一个受此启发的片段( compiler explorer link ):

struct Rational {
Rational(int numer, int denom): numer(numer), denom(denom) {}
int numer, denom;
};

Rational operator*(const Rational& lhs, const Rational& rhs) {
return Rational(lhs.numer * rhs.numer, lhs.denom * rhs.denom);
}

int main() {
Rational a(1,2), b(3,4), c(5,6);
a*b = c;
}
据我了解, a*b是一个 r 值,因此在内存中没有位置。怎么可能在 r 值上调用赋值运算符?

最佳答案

a*b = c;调用 Rational 上的赋值运算符返回者 a * b .生成的赋值运算符与定义以下内容相同:

Rational& Rational::operator=(const Rational&) = default;
没有理由不能在临时 Rational 上调用它.你也可以这样做:
Rational{1,2} = c;
如果你想强制赋值运算符只能在左值上调用,你可以像这样声明它,用 &最后的预选赛:
Rational& operator=(const Rational&) &;

关于c++ - 为什么这个 C++ 代码片段将一个值分配给一个右值编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65328779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com