C ++ 11 Curly Braces

时间:2014-01-25 15:49:34

标签: c++ c++11 syntax

我好几年没用过C ++了,刚刚遇到过这个问题:

program.build({ default_device })

定义是:

cl_int build(
    const VECTOR_CLASS<Device>& devices,
    const char* options = NULL,
    void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
    void* data = NULL) const

那里有什么花括号?我之前从未见过像这样的函数调用。我假设它与函数指针有关,但这似乎是可选的?

3 个答案:

答案 0 :(得分:25)

std::vector有一个带std::initializer_list的构造函数。

initializer_list可以用花括号表示。

因此,此代码会在其中创建一个带有default_device的向量,并将其传递给build成员函数。

答案 1 :(得分:14)

在:

program.build({ default_device })

您将自动实例化临时VECTOR_CLASS<Device>对象。它相当于:

program.build(VECTOR_CLASS<Device>{ default_device })

相当于:

program.build(std::vector<Device>{ default_device })

将调用the std::initializer_list constructor

std::vector::vector(std::initializer_list<T> init, 
    const Allocator& alloc = Allocator());

答案 2 :(得分:3)