gpt4 book ai didi

c++ - return {} 和 return Object{} 之间的区别

转载 作者:IT老高 更新时间:2023-10-28 22:02:04 27 4
gpt4 key购买 nike

这两个功能有什么明显的区别吗?

struct Object {
Object(int i) : i{i}
{
}

int i;
};

Object f() { return {1}; }
Object g() { return Object{1}; }

最佳答案

第一个是copy-list-initialization ,将选择合适的构造函数(即Object::Object(int))来构造返回值。

第二个将通过 direct-list-initialization 构造一个临时 Object ,(也调用Object::Object(int)),然后将其复制到返回值。因为copy elision (从 C++17 保证),这里省略了复制或移动构造。

因此,对于您的示例,它们具有相同的效果; Object::Object(int) 用于构造返回值。请注意,对于第一种情况,如果构造函数是 explicit 那么它不会被使用。

  • 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)

关于c++ - return {} 和 return Object{} 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50972150/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com