Подтвердить что ты не робот

С++ 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

Для чего нужны фигурные скобки? Я никогда не видел, чтобы они использовались в вызове функции, как это раньше. Я предполагаю, что это имеет какое-то отношение к указателю функции, но это кажется необязательным?

4b9b3361

Ответ 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());