下面的代码失败了push_back
并成功为emplace_back
:的push_back VS 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
failes因为它需要一个参考,并尝试从基准隐含抛弃volatile
预选赛。
但是,emplace_back
也需要参考(右值参考是参考)。为什么它被区别对待?
也许这个职位:http://stackoverflow.com/questions/4303513/push-back-vs-emplace-back – taocp 2013-04-04 17:00:36
我明白这不是真的问题,但如果你需要一个解决方法转换类型:'vec .push_back(static_cast(x));'(或者'int(x)'或'(int)x')。 –
2013-04-04 17:21:43