gpt4 book ai didi

c++ - 什么时候应该使用直接初始化,什么时候应该使用复制初始化?

转载 作者:IT老高 更新时间:2023-10-28 22:34:09 26 4
gpt4 key购买 nike

这仅仅是偏好还是有特定的情况需要一个而不是另一个?我指的是以下变体进行初始化

T t(e); // direct initialization
T t = e; // copy initialization

最佳答案

您描述的事物的实际名称不是隐式和显式赋值,而是:

  • 复制初始化:T x = a;
  • 直接初始化:T x(a);

它们是等效的,尤其是在需要转换的上下文中,例如当 T 是类类型而 a 是不同类型的(有关甚至不涉及转换的上下文示例,请参见 Alf 注释)。考虑以下代码:

class Test
{
public:
explicit Test(int i) { /* ... */ }
};

int main()
{
Test t(0); // OK : calls Test::Test(int)
Test u = 0; // KO : constructor is marked explicit
}

解释标准(8.5/14):

  • 对于源类型与目标类相同或派生类的直接初始化和复制初始化,考虑构造函数
  • 对于其他复制初始化情况,如我的示例中的第二行main考虑用户定义的转换顺序。由于 explicit 关键字不允许使用 Test 构造函数进行隐式转换,因此第二行编译失败。

关于c++ - 什么时候应该使用直接初始化,什么时候应该使用复制初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4293596/

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