Скажем, у меня есть небольшая структура с int
, double
и std:string
.
У меня есть vector
этих структур.
Эффективным решением C было бы выделить массив, затем выполнить цикл и установить значения поля. Каждое значение вычисляется только один раз и сохраняется там, где находится его окончательное местонахождение.
В С++ 11 я могу использовать emplace_back()
, чтобы не создавать временную структуру в стеке, а затем копировать ее в векторную память и удалять временную структуру. Но я предоставляю список инициализаторов, заключенный в фигурные скобки, для emplace_back()
, и компилятор жалуется, что нет соответствующей функции для вызова emplace_back
со списком инициализаторов, заключенным в фигурные скобки.
Так должен ли я написать открытый конструктор с тремя аргументами в этом случае? И если бы я это сделал, было бы это так же эффективно, как версия C?
{}
?emplace_back
принимает переменное количество аргументов, поэтому вы можете сделатьemplace_back(i, d, s);
Возможно, я неправильно понимаю вопрос. Можете ли вы показать код, с которым у вас возникла проблема? - person cigien   schedule 24.08.2020std::string
, также не является POD. - person Ulrich Eckhardt   schedule 24.08.2020