#include <vector>
#include <string>
#include <iostream>
struct PersonA {
int age; std::string name;
PersonA(int _age, const std::string& _name) : age(_age), name(_name) {}
};
struct PersonB {
int age; std::string name;
PersonB(int _age, const std::string&& _name): age(_age), name(_name) {}
};
struct PersonC {
int age; std::string name;
};
int main()
{
std::vector<PersonA> personA;
personA.emplace_back(10, "nameA"); // fine
std::vector<PersonB> personB;
personB.emplace_back(10, "nameB"); // fine
std::vector<PersonC> personC;
//personC.emplace_back(10, "nameC"); // (the implicit move constructor) not viable
// (the implicit default constructor) not viable
personC.emplace_back(); // UPDATE: fine.
}
Вопрос> Почему vector::emplace_back
запрашивает явное определение конструктора, иначе следующая строка не работает?Почему конструктор по умолчанию не работает для `vector :: emplace_back`
// why it cannot make use of the default constructor of PersonC?
personC.emplace_back(10, "nameC");
Также vector::emplace_back
не поддерживает равномерную инциализацию. Имеет ли это отношение к вышеупомянутой проблеме?
Спасибо
Да, отсутствие единообразной инициализации использования 'emplace_back' является причиной этого. –
Остерегайтесь плохости, вызванной использованием ведущих подчеркиваний ... –