第一个是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)