C++ 11 Curly Braces

rhu*_*hes 23 c++ syntax c++11

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

program.build({ default_device })
Run Code Online (Sandbox Code Playgroud)

定义是:

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

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

typ*_*232 27

std::vector有一个构造函数,需要一个std::initializer_list.

initializer_list可以用花括号表示.

因此,此代码创建一个包含其中一个的向量,default_device并将其传递给build成员函数.


Sho*_*hoe 14

在:

program.build({ default_device })
Run Code Online (Sandbox Code Playgroud)

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

program.build(VECTOR_CLASS<Device>{ default_device })
Run Code Online (Sandbox Code Playgroud)

这相当于:

program.build(std::vector<Device>{ default_device })
Run Code Online (Sandbox Code Playgroud)

这将调用std::initializer_list构造函数:

std::vector::vector(std::initializer_list<T> init, 
    const Allocator& alloc = Allocator());
Run Code Online (Sandbox Code Playgroud)

  • `program.build({default_device})`*here*相当于`program.build(VECTOR_CLASS <Device> {default_device})`:前者是copy-list-initialization而第二个是direct-list-initialization.对于明确的ctors来说,有一个微妙的区别. (2认同)