其他分享
首页 > 其他分享> > c – return {}和return Object {}之间的区别

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