Почему v.emplace_back(nullptr); компилируется (а затем приводит к ошибке выполнения), но возникает ошибка компилятора для v.push_back(nullptr);?В некоторых статьях в большинстве случаев рекомендуется использовать emplace_back вместо push_back, но emplace_back может вызвать потенциальные ошибки. Когда мне следует избегать использования emplace_back?
#include
#include
int main() {
std::vector v;
v.emplace_back(nullptr); // runtime error
v.push_back(nullptr); // compile error
return 0;
}
Вывод gcc:
: In function 'int main()':
:9:14: error: no matching function for call to 'std::vector::push_back(std::nullptr_t)'
9 | v.push_back(nullptr); // compile error
| ~~~~~~~~~~~^~~~~~~~~
Подробнее здесь: https://stackoverflow.com/questions/790 ... f-stdregex