为什么v.emplace_back(nullptr);
编译(然后导致运行时错误)但出现编译器错误v.push_back(nullptr);
?
emplace_back
有些文章建议在大多数情况下使用push_back
,但emplace_back
会导致潜在的错误。什么时候应该避免使用emplace_back
?
#include <regex>
#include <vector>
int main() {
std::vector<std::regex> v;
v.emplace_back(nullptr); // runtime error
v.push_back(nullptr); // compile error
return 0;
}
<source>: In function 'int main()':
<source>:9:14: error: no matching function for call to 'std::vector<std::__cxx11::basic_regex<char> >::push_back(std::nullptr_t)'
9 | v.push_back(nullptr); // compile error
| ~~~~~~~~~~~^~~~~~~~~