首页 > 解决方案 > 使用 () 或 {} 作为初始值设定项列表有什么区别

问题描述

我正在查看构造函数的 cppreference,我遇到了这个:

class X {
    int a, b, i, j;
public:
    const int& r;
    X(int i)
      : r(a) // initializes X::r to refer to X::a
      , b{i} // initializes X::b to the value of the parameter i
      , i(i) // initializes X::i to the value of the parameter i
      , j(this->i) // initializes X::j to the value of X::i
    { }
};

为 b 和 i 构造时,为什么它们使用不同的括号?第一个使用 {},第二个使用 ()

谁可以给我解释一下这个?我尝试使用两者,但我找不到区别。

标签: c++initializer-list

解决方案


在您的示例中没有区别,您可以使用它们中的任何一个,但是在其他一些上下文中存在一些差异,例如,您可以使用花括号来初始化向量,请参见下面的程序。

#include<iostream>
#include<vector>

int main(){

    std::vector<int> first(12,3,5,6);   // Compile time error
    std::vector<int> second{12,3,5,6};  // Ok 

    return 0;
}

希望这可以帮助您了解差异,有关更多信息,您应该查看@Thomas Salik 提到的链接。 链接


推荐阅读