加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 当返回不可移动的不可复制对象时,ctor {}和{}之间的差异

发布时间:2020-12-16 05:45:13 所属栏目:百科 来源:网络整理
导读:这是我想出的情况: #include iostreamusing namespace std;struct test { test() { cout "ctor" endl; } test(const test) = delete; test(test) = delete;};auto f() - test { return {}; // return test{};}auto main() - int { f();} 这个代码与clang和g
这是我想出的情况:
#include <iostream>
using namespace std;

struct test {
    test() { cout << "ctor" << endl; }

    test(const test&) = delete;
    test(test&&)      = delete;
};

auto f() -> test {
    return {};
    // return test{};
}

auto main() -> int {
    f();
}

这个代码与clang和gcc一起编译,但是当我更改return {}以返回test {}时,它不再编译.这是为什么?在这两种情况下,它不应该是一样的吗?
坦白说,我不知道这是否有一个很好的用例,但它让我感到惊讶,所以现在我想知道发生了什么.

解决方法

return {}使用空的初始化列表来初始化返回值,使用默认构造函数.

return test {}使用默认构造函数创建一个临时文件,然后使用它使用移动或复制构造函数来初始化返回值.你已经删除了这些构造函数,所以不能完成.

在实践中,复制或移动将被消除,以便两者具有相同的效果 – 但是第二个仍然需要可访问的构造函数,即使它没有被实际使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读