c++ - 使用 () 或 {} 作为初始值设定项列表有什么区别
问题描述
我正在查看构造函数的 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 构造时,为什么它们使用不同的括号?第一个使用 {},第二个使用 ()
谁可以给我解释一下这个?我尝试使用两者,但我找不到区别。
解决方案
在您的示例中没有区别,您可以使用它们中的任何一个,但是在其他一些上下文中存在一些差异,例如,您可以使用花括号来初始化向量,请参见下面的程序。
#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 提到的链接。 链接。