使用括号构造非聚合对象

时间:2014-09-12 07:17:14

标签: c++

我是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)

1 个答案:

答案 0 :(得分:1)

这里的语法

Person person { update_loop };

是新的“统一初始化”语法(在C ++ 11中引入)并且是常规direct initialization的一部分。

在您的情况下,使用(){}将是等效的,但情况并非总是如此。 {}不允许缩小转化次数等,也避免了()中出现的“最棘手的解析”问题。