gpt4 book ai didi

c++ - 返回声明中的构造

转载 作者:可可西里 更新时间:2023-11-01 15:25:08 25 4
gpt4 key购买 nike

假设我们有一个 Foo 类,它具有来自 int 的非显式 构造函数。然后针对以下功能:

Foo makeFoo1() { return 123; }
Foo makeFoo2() { return {123}; }

我认为 makeFoo1 要求 Foo 的复制/移动构造函数是可访问的,而且编译器可能(尽管不太可能)这样做不删除拷贝,从而导致真正的复制/移动。

对于makeFoo2,因为我们使用的是复制列表初始化,所以永远不会发生复制/移动。

我是否真的应该为此担心并尽可能将非显式 构造函数的参数放在大括号中(如makeFoo2)? (假设我是一名图书馆作者,并希望该图书馆与嵌入式系统的低于标准的编译器一起使用。)

最佳答案

我会在这里冒险,将实际的答案与薄弱的语言律师理由结合起来。

弱语言律师论证:如果我理解 this cppreference.com description正确地,当使用初始化列表 (makeFoo2) 进行初始化时,与仅使用 int 返回 (makeFoo1) 相比,您不能保证 RVO。所以,不要用大括号将您的整数括起来。

实际论证 1:来吧,那些大括号得到是多余的。它们应该是多余的。所以不要使用它们,这似乎不对。

实用论证2:最小惊奇原则。使用这些大括号,你是在暗示无大括号的形式有问题。我会对牙套感到困惑和惊讶(尽管不是很困惑)。

实用论据 3:在这些情况下 - 相信编译器。这不是您的性能瓶颈所在(如果是 - 将其设为内联函数,它不会;或者如果您有现有对象,则使用引用;等等)。

关于c++ - 返回声明中的构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38143465/

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