Учитывая следующий код, я был удивлен, что try_emplace
не смог использовать конструктор по умолчанию, продемонстрированный в первой строке основной функции, вместо этого жалуясь на отсутствие соответствующего вызова функции для Element::Element(double, double)
. Я неправильно понял, как компилятор создает конструкторы по умолчанию или использование try_emplace
? Конечно, я могу заставить этот код работать, определив все параметры ctors для Element
, но это кажется излишним.
#include <string>
#include <map>
struct Element
{
double a;
double b;
};
int main(int argc, char** argv)
{
Element e {2.0, 3.0};
std::map<std::string, Element> my_map;
my_map.try_emplace("hello", 2.0, 3.0);
return 0;
}
try_emplace
только попытается вызвать c'tor (без агрегатной инициализации). - person George   schedule 21.08.2018Element e{2.0, 3.0}
? - person Madden   schedule 21.08.2018