c – return {}和return Object {}之间的区别
作者:互联网
这两个功能之间有什么显着差异吗?
struct Object {
Object(int i) : i{i}
{
}
int i;
};
Object f() { return {1}; }
Object g() { return Object{1}; }
解决方法:
第一个是copy-list-initialization,将选择approriate构造函数(即Object :: Object(int))来构造返回值.
第二个将通过direct-list-initialization构造一个临时对象(也调用Object :: Object(int)),然后将其复制到返回值.由于copy elision(由C 17保证),这里省略了复制或移动结构.
因此,对于您的示例,它们具有相同的效果; Object :: Object(int)用于构造返回值.请注意,对于第一种情况,如果构造函数是显式的,则不会使用它.
direct-list-initialization (both explicit and non-explicit constructors are considered)
copy-list-initialization (both explicit and non-explicit constructors are considered, but only non-explicit constructors may be called)
标签:list-initialization,c,c11,initialization 来源: https://codeday.me/bug/20190910/1800961.html