下面的代碼失敗了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