【发布时间】:2017-12-28 09:31:45
【问题描述】:
在 C++ 中,当使用 initializer_list 语法初始化对象时,当没有其他列表初始化规则适用时,对象的常规构造函数也参与重载决策。 据我了解,以下代码调用 X::X(int)
class X { int a_; X(int a):a_(a) {} );
void foo() {
X bar{3};
}
但我不明白,为什么在 initializer_lists 的上下文中也考虑常规构造函数。我感觉现在很多程序员写 X{3} 来调用构造函数,而不是 X(3) 来调用构造函数。 我根本不喜欢这种风格,因为它让我觉得对象没有常规的构造函数。
initializer_list 语法也可以用来调用常规构造函数的原因是什么?现在有理由比常规构造函数调用更喜欢这种语法吗?
【问题讨论】:
-
“我一点也不喜欢这种风格,因为它让我觉得对象没有常规的构造函数” - 我不会称之为语言问题.
-
原因是他们想让这种语法几乎适用于任何类型。你会发现它也适用于 int 和数组。如果旧的语法适合您,那么没有真正的理由更喜欢旧的语法而不是久经考验的语法。
-
现在很多程序员都写 X{3} 是的,它是统一初始化。
标签: c++ standards uniform-initialization