【发布时间】:2021-02-13 22:57:24
【问题描述】:
我在查看构造函数的 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 构造时,为什么它们使用不同的括号?第一个使用 {},第二个使用 ()
谁能给我解释一下?我尝试使用两者,但找不到区别。
【问题讨论】:
-
en.cppreference.com/w/cpp/language/initialization
{}可用于值初始化和列表初始化。()用于直接初始化。 -
它们在不同的情况下并不多,而且差异往往是针对每种情况而定的。除了 Thomas 提供的链接之外,还有一个很好的讨论 here。这在初始化容器时特别重要。
-
一个区别是 {} 将限制“最麻烦的解析”。
标签: c++ initializer-list