我好几年没用过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
那里有什么花括号?我之前从未见过像这样的函数调用。我假设它与函数指针有关,但这似乎是可选的?
答案 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)