c – return {}和return Object {}之间的区别

weixin_38088019 2019-09-12 01:05:44
这两个功能之间有什么显着差异吗? struct Object { Object(int i) : i{i} { } int i; }; Object f() { return {1}; } Object g() { return Object{1}; }
...全文
106 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38090265 2019-09-12
  • 打赏
  • 举报
回复
第一个是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)

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧