我是C ++的初学者,昨天我遇到了一个我不明白的构造函数。
struct Person
{
explicit Person(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;
Person person { update_loop };
}
我知道以这种方式初始化聚合对象是可能的,但Person
没有数据成员,只有构造函数和函数,所以Person person { update_loop }
究竟是什么?如果它使用显式构造函数不应该使用圆括号,如Person person(update_loop)
?
答案 0 :(得分:1)
这里的语法
Person person { update_loop };
是新的“统一初始化”语法(在C ++ 11中引入)并且是常规direct initialization的一部分。
在您的情况下,使用()
或{}
将是等效的,但情况并非总是如此。 {}
不允许缩小转化次数等,也避免了()
中出现的“最棘手的解析”问题。