私はより良い移動セマンティクスを理解するための簡単なテストを行いました。出力結果は予期せぬものでした。左辺のセマンティクスを移動する
template<class T>
void test(T&& v)
{
v++;
}
void main()
{
int v = 1;
test(std::move(v));
std::cout << "Output:" << v << std::endl;
}
私の期待がいた: 出力:ベローは私のテスト機能である1 しかし、本当の結果だった: 出力:2次のように私は思っ
- 私がのstd ::移動使う(V)、その結果、私は "rvalue"への変換があり、テスト関数は時間的変数で動作します。したがって、結果は出力する必要があります。1. 私の結論は間違っていますか?
void mainがC++標準に準拠していません。 –
'std :: move'の名前は悪く選ばれています。これはおそらくあなたを混乱させるでしょう。実際には何も動かない。それは左辺値を右辺値にキャストし、移動を可能にします*。 –