Игнорируя разрешение на копирование / перемещение из компилятора, я хотел бы знать, если следующий код (при условии, что foo имеет конструктор, принимающий три целых числа) «синтаксически» создает временный объект, а затем копирует / перемещает инициализирует аргумент функции, илинапрямую вызывает конструктор:
void acceptsFoo(foo a);
acceptsFoo({1, 2, 3});
А как насчет этого случая?
//ignoring RVO optimization
foo returnsFoo()
{
return {1, 2, 3};
}
Я знаю, что приведенный ниже код, даже без разрешения копирования / перемещения, аналогичен вызову конструкторапоэтому не будет генерировать временные данные, но я не смог найти информацию о коде выше.
foo = { 1, 2, 3 } //assuming the constructor is non-explicit
foo { 1, 2, 3 }