我遇到了一些問題,在實現我的項目在我STD元素的移動構造函數::陣列在Visual Studio 2013年的std ::移動(STD ::陣列)G ++ VS視覺C++
所以,我想在使用g ++ 5.3.0編譯的記事本++中做一個最小的例子。
才發現,在G ++我能做什麼,我試圖
例如G ++:
#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;
}
輸出:
========= 1 === ========
拷貝構造
移動構造
========= 2 ===========
移動構造
移動構造
========= 3 ===========
移動構造
移動構造
當我試圖在(幾乎)相同的在視覺工作室2013的結果代碼是不同的:
輸出:
========= 1個===========
拷貝構造
移動構造
========= 2 ===========
拷貝構造
拷貝構造
========= 3 === ========
拷貝構造
拷貝構造
我如何使用移動構造函數在Visual C++和爲什麼的Visual C++拒絕在這裏使用他呢?
OT,你真的需要發佈兩個代碼示例,因爲不必要的'stdafx.h'和'_tmain'? – LogicStuff
[離線主題]'B(array &a):m_a(std :: move(a))'不是你想要將某物移動到對象中的方式。您將呼叫站點中的對象從沒有任何指示的情況下移開。 – NathanOliver
@LogicStuff我想表明我沒有做任何不同的事情。 – turoni