gpt4 book ai didi

c++ - 初始化:T x(value) vs. T x = value 当 value 是 T 类型时

转载 作者:搜寻专家 更新时间:2023-10-31 00:23:32 25 4
gpt4 key购买 nike

T x(value) 通常是更好的选择,因为它会直接用值初始化 x,而 T x = value 可能会根据值的类型创建一个临时值。在 value 是类型 T 的特殊情况下,我的猜测是表达式 T x = value 将总是导致恰好一个复制构造函数调用。我说得对吗?

我问这个问题是因为我开始认为第一种语法太丑陋且难以理解,尤其是当值是函数调用的结果时。例如:

  • const std::string path(attributes.data(pathAttrib));
  • const std::string path = attributes.data(pathAttrib);

最佳答案

T x(value) is usually the better choice because it will directly initialize x with value, whereas T x = value might create a temporary depending on the type of value.

你几乎是对的,更好的选择是最清晰的语法。以下是两者的不同之处:

The form of initialization (using parentheses or =) is generally insignificant, but does matter when the entity being initialized has a class type... [8.5/11]

struct A {
A(int) {}
};
struct B {
explicit B(int) {}
};

int main() {
{ A obj (42); } // succeeds
{ A obj = 42; } // succeeds

{ B obj (42); } // succeeds
{ B obj = 42; } // fails
}

需要隐式转换,所以像 vector<int> v = 3; 这样的东西失败了,但无论如何看起来不对,对吧?任何拷贝都可能是 elided .我不记得我发现这是我写的任何东西的瓶颈,我很久以前就不再担心它了:只要使用最清晰的语法即可。


In the special case where value is of type T though, my guess is that the expression T x = value will always result in exactly one copy constructor call. Am I correct?

不,你不能保证复制构造函数总是被调用,但它必须是可访问的。例如,在您上面的特定情况下 value作为函数的返回值,标准明确允许省略这些拷贝。

关于c++ - 初始化:T x(value) vs. T x = value 当 value 是 T 类型时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1816547/

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