4

次のコードは で失敗し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 受け取ります (rvalue-references は参照です)。なぜ扱いが違うのでしょうか?

4

1 に答える 1