【发布时间】:2013-03-02 00:37:20
【问题描述】:
关于 C++11 语法的简单问题。有一个示例代码(从source减少一个)
struct Wanderer
{
explicit Wanderer(std::vector<std::function<void (float)>> & update_loop)
{
update_loop.emplace_back([this](float dt) { update(dt); });
}
void update(float dt);
};
int main()
{
std::vector<std::function<void (float)>> update_loop;
Wanderer wanderer{update_loop}; // why {} ???
}
我想知道,如何使用大括号调用构造函数,例如Wanderer wanderer{update_loop}; 它既不是初始化列表,也不是统一初始化。这是什么东西?
【问题讨论】:
-
但是是统一初始化。大括号可用于调用构造函数,但始终首选采用
std::initializer_list类型的构造函数。 -
// why {} ???-- 好问题。没有理由比Wanderer wanderer(update_loop)更喜欢这个。 -
@ipc 在某些情况下,它可以避免最麻烦的解析。
-
@juanchopanza:但在其他情况下,它可以一次默默地改变代码的含义。我不喜欢“统一”初始化。
-
@ipc 当然,这是这个初始化的一个非常丑陋的特性。
标签: c++ c++11 constructor