在c编程语言中,rvalues(rvalues(右手值))中,分配给类类型rvalues
理解为什么此代码有效的关键在于合成成员函数的概念。对于不明确定义分配运算符的类,编译器会生成默认的分配运算符。该默认操作员是一个成员函数,它引用与其参数同一类的对象。
class Y {
public:
explicit Y(size_t num = 0) {}
};
int main() {
Y(1) = Y(0); // WHAT?!?
return 0;
}
使用返回rvalue的构造函数创建一个对象,返回rvalue,compiler会在内存中生成临时对象。在创建其陈述的结尾,该临时对象会自动破坏。但是,在构造函数返回类类型的rvalue的情况下,合成的分配操作员可以延长临时对象的寿命。是以下代码的句法糖:
y(1).operator =(y(0));Conclusion
Contrary to what is typically expected, it is possible to assign to an rvalue of class type in C because the compiler synthesizes non-const assignment operators for classes without an explicitly defined assignment operator.这些合成的分配运算符延长了由构造函数创建的临时对象的寿命,从而允许分配到rvalues。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3