2016-08-04 15 views
11

私のコードにstd::moveを使用しようとしていますが、使用しているコンパイラ(g ++ 4.4)はサポートしていません。 boost::movestd::moveを完全に代用できますか?ありがとう。std :: moveの対応部分がブーストライブラリ

+8

'G ++ 4.4'は非常に古いです。新しいバージョンへの移行を検討する – alexeykuzmin0

答えて

11

std::move(およびC++ 0xサポートが有効な場合はboost::move)は、T&からT&&へのキャストのみです。実際には何も動かない。これは、特定のタイプのポインタT&&がコンパイラによってサポートされていなければならないことを意味します。 GCCはバージョン4.3以降のr値参照をサポートしているので、boost版はうまくいくはずです。

しかし、std::move#include <utility>から使用できない理由はありますか?

http://en.cppreference.com/w/cpp/utility/move

あなただけのgcc 4.4が持っている限られたC++ 11のサポートを有効にするために、コンパイラオプションとして-std=c++0xを指定してくださいする必要があります。

+3

C++ 03の 'boost :: move'では**キャスト**だけではないので、そこで動作します。 Boost.Moveは、C++ 0xコンパイラで真のrvalue参照に拡張され、C++ 03コンパイラでrvalue参照クラスと変換演算子をエミュレートするマクロに基づいています。 [Boost docs](http://www.boost.org/doc/libs/1_59_0_b1/doc/html/move/how_the_library_works.html)を参照してください。 – nugae

+0

@nugaeはい、あなたは絶対に正しいです。 –

8

はい、それができ

Boost.Moveは何ですか?

Rvalue参照は、C++値の移動セマンティクス を有効にする主要なC++ 0x機能です。しかし、我々はC++ 0xコンパイラを移動semanaticsの の利点を取る必要はありません。 Boost.MoveはC++ 0xの移動セマンティクスをエミュレートします。 はC++ 03のコンパイラであり、 はC++ 03とC++ 0xコンパイラで最適に機能する移植可能なコードを書くことができます。

出典: http://www.boost.org/doc/libs/1_59_0_b1/doc/html/move.html

関連する問題