以下代码失败push_back
并成功emplace_back
:
#include <vector>
volatile int x = 0;
int main()
{
std::vector<int> vec;
vec.emplace_back(x);
vec.push_back(x); // error: no matching function for call to 'std::vector<int>::push_back(volatile int&)'
}
我理解这是失败的,因为它需要一个引用并试图从该引用中隐式地push_back
抛弃限定符。volatile
但是,emplace_back
也需要一个引用(右值引用是引用)。为什么要区别对待?