のstd ::移動(STD ::配列)G ++ VSビジュアルC++
だから私が試したVisual Studioで私のプロジェクトでの移動の私のstd内の要素のコンストラクタ::配列を実装するいくつかの問題を抱えていた
私がg ++ 5.3.0でコンパイルしたnotepad ++の最小限の例を作っています。
#include <iostream>
#include <array>
using namespace std;
struct A{
A() = default;
A(const A&)
{
cout << "copy constructed" << endl;
}
A(A&&)
{
cout << "move constructed" << endl;
}
};
class B{
public:
B(array<A, 2>&& a)
: m_a(std::move(a))
{}
private:
array<A, 2> m_a;
};
int main(){
A foo;
cout << "=========1===========" << endl;
array<A, 2> a = { { foo, std::move(foo) } };
cout << "=========2===========" << endl;
B b(std::move(a));
cout << "=========3===========" << endl;
array<A, 2> a_second = std::move(a);
return 0;
}
出力:だけ私は
例G ++しようとしていたものを行うことができ++グラムのそれを見つけるため
========= 1 === ========
コピー
移動が
動きがを構築
========= 2 ===========を構築構築 動きは同じ
動きは私が(実際に)しようとしたとき
移動が
を構築構築
========= 3 ===========を構築しましたVisual Studioでコード2013、結果は違っていた:
出力:
========= 1 ===========
コピーがを構築 動きは
を構築 ========= 2 ===========
コピー
コピー
========= 3を構築構築=== ========
コピーはどのように視覚的なCに移動コンストラクタを使用することができ++、なぜここに彼を使用することを拒否Visual C++にはありません
を構築
コピーを構築しましたか?
OT、本当に不要な 'stdafx.h'と' _tmain'のために2つのコードサンプルを投稿する必要がありましたか? – LogicStuff
[Off Topic] 'B(配列&a):m_a(std :: move(a))'は、何かをオブジェクトに移動する方法ではありません。コールサイト内のオブジェクトは、それが何の指示もなく移動したままになります。 – NathanOliver
@LogicStuff私は何か違うことをしていないことを示したかったのです。 – turoni