首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将rvalue分配给rvalue

将rvalue分配给rvalue
EN

Stack Overflow用户
提问于 2020-10-03 02:31:38
回答 1查看 87关注 0票数 1

我能问一下为什么下面的代码可以编译而没有任何错误吗?

代码语言:javascript
复制
struct Test {
    int num;
};

int main() {
    (Test){.num = 10} = (Test){.num = 20};
    return 0;
}

(Test){.num = 10}(Test){.num = 20}是rvalue,不可能将rvalue分配给另一个rvalue。cpp如何认为语句是有效的?

PS:代码是使用C++11标准编译的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-03 02:43:14

默认情况下,这正是在c++中指定特殊成员函数的方式。例如,Test具有一个综合的特殊成员函数:

代码语言:javascript
复制
Test& operator=(Test const &) = default; // if you write it out

它可以在lvalue和rvalue上调用。

如果不允许向rvalue分配赋值,则必须自定义类的行为:

代码语言:javascript
复制
struct Test {
    int num;
    Test& operator=(Test const &) & = default;  // lvalues: ok
    Test& operator=(Test const &) && = delete;  // rvalues: error
};

下面是演示中的c++20,就像示例中的代码一样,但同样的原则也适用于c++11。

请注意,对于内置类型,这种行为更明智,因此您不能这样做:

代码语言:javascript
复制
42 = 5;
3 + 3 = 6; 

也没有办法让它编译。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64180170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档