【问题标题】:Difference between int i(x); and int i = x; [duplicate]int i(x) 之间的差异;和int i = x; [复制]
【发布时间】:2021-07-31 02:33:25
【问题描述】:

我一直在 HackerRank 中练习 C++。在那里,我看到了不同的提交,并且看到了一些新的东西。 有人在 for 循环中使用了int i(0),例如

for (int i(0), mark; i<q; ++i)

所以我的问题是:

  1. int i(x);int i = x; 有什么区别? (其中 x 是在这些行之前初始化的 int 类型)。

【问题讨论】:

    标签: c++ default-constructor variable-initialization


    【解决方案1】:

    答案本质上是here

    int i(x);direct initialization 哪个

    从一组显式的构造函数参数初始化一个对象。

    int i = x;copy initialization,其中

    从另一个对象初始化一个对象

    (以下可能与int无关,因此将其作为实际类的两种语法差异的评论:A i(x); vs A i = x;。)

    请注意,这两种语法都可能导致调用复制构造函数:如果类 A 存在复制构造函数,则可以通过 提供的构造函数参数的显式集 >直接初始化可以只包含一个 A 类的对象(顺便说一下,如果 xint/Aint i(x);/A i(x); 中会发生什么。

    这就是说复制初始化并不是构造一个对象的唯一方法,从同一个类的另一个对象复制它。

    在我看来,另一点值得注意的是,复制初始化并不一定意味着将调用复制构造函数。如果类A 有(在复制构造函数A(A const&amp;) 旁边,如果你喜欢的话)构造函数A(int),如果你写A a = 3;,那就是将被调用的构造函数。

    所有这一切都是说,在我看来,您在我提供的第一个链接中列出的 6 种语法的名称并没有真正告诉您会发生什么;更多的语法可能会发生相同的事情,而相同的语法可能会发生不同的事情。这 6 个只是引用初始化的语法的名称,而不是初始化过程的发生方式,因为后者取决于初始化对象的类和初始化对象(以及你选择的语法,当然)。

    【讨论】:

      猜你喜欢
      • 2012-12-08
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多