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 {}使用默认构造函数创建一个临时文件,然后使用它使用移动或复制构造函数来初始化返回值.你已经删除了这些构造函数,所以不能完成. 在实践中,复制或移动将被消除,以便两者具有相同的效果 – 但是第二个仍然需要可访问的构造函数,即使它没有被实际使用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |