С++ 11 Curly Braces
Я не использовал С++ в течение нескольких лет, и только что наткнулся на это:
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
Для чего нужны фигурные скобки? Я никогда не видел, чтобы они использовались в вызове функции, как это раньше. Я предполагаю, что это имеет какое-то отношение к указателю функции, но это кажется необязательным?
Ответы
Ответ 1
std::vector
имеет конструктор, который принимает std::initializer_list
.
Список initializer_list может быть выражен с фигурными фигурными скобками.
Таким образом, этот код создает в нем вектор с одним default_device
и передает его функции-члену build
.
Ответ 2
В:
program.build({ default_device })
вы автоматически создаете временный объект VECTOR_CLASS<Device>
. Это эквивалентно:
program.build(VECTOR_CLASS<Device>{ default_device })
что эквивалентно:
program.build(std::vector<Device>{ default_device })
который вызывается конструктором std::initializer_list
:
std::vector::vector(std::initializer_list<T> init,
const Allocator& alloc = Allocator());
Ответ 3
Это списки инициализаторов, например. http://www.cplusplus.com/reference/initializer_list/initializer_list/