1. ホーム
  2. c++

[解決済み] std、tr1、boostの違い(名前空間やライブラリとしての違い)は何ですか?

2022-02-24 12:08:16

質問

最初はどれも同じだと思っていたのですが、それは間違いでした。そこで、どなたかこの3つの違いを簡単に説明していただけませんか?例えば

  1. std::bind ( 最新作、次世代C++ )
  2. std::tr1::bind ( 古い、C++ std の拡張 )
  3. boost::bind ( 完全に別のライブラリ )

または std::shared_ptr , std::tr1::shared_ptr および boost::shared_ptr , ...など

更新情報

bind , shared_ptr は、私の質問を明確にするのに役立つ例です。私の意図は、これら3つの名前空間の一般的な差異を理解することでした。3つの名前空間のすべてに存在するライブラリがいくつかあり、どうやら bind はその一例であり、また shared_ptr .

どのような名前空間にこだわればよいのでしょうか?個人的には std:: C++の次の標準になるので(C++0x)。

解決方法は?

1 - std::bind が標準的な名前です。C++11に準拠したライブラリでは、この名前を使用することになります。すべてのリスト 標準化されたC++のライブラリ .

2 - std::tr1::bind はC++ Technical Report 1の名前空間です。C++03 から C++11 までの間は C++テクニカルレポート1 というように、ライブラリの追加や機能強化が提案されています。これらのほとんどは当時すでに Boost に存在しており、これらのライブラリの変更のいくつかは C++11 標準に採用されました。 <regex><functional> (を含む)。 std::bind ). その std::tr1 名前空間は、標準化されたすべてのライブラリとは対照的に、作業中の状態のライブラリを区別するために使用されました。 std という名前空間があります。

3 - boost::bind bind の中に boost 名前空間を使用している場合は ブースト ライブラリです。Boostは、TR1にあるもの、C++11のstdライブラリにあるものよりも、はるかに多くのものを包含しています。すべての 1.52.0 時点で Boost に含まれるライブラリ

TR1にあったもののほとんどは標準化され、C++11にあります。 std の名前空間で定義されたスレッドサポートのように、Boostの構成要素から適応されたライブラリがTR1で言及されたものよりも多く含まれています。 <thread> .

現在、何が使えるか、どの名前空間が使えるかを定義するものの一部は、コンパイラに依存します。思い出せませんが、より最近のGCC-g++の実装では、この名前空間を使うようになったと思います。 std 名前空間は新しい C++11 ライブラリに対応しますが、それを有効にするには別のコンパイラーフラグが必要な場合があります。しかし、それを有効にするには別のコンパイラーフラグが必要かもしれません。 std::tr1 という名前空間があります。Visual C++ 2010 では、以前は std::tr1 を通常の std 名前空間を使用していましたが、Visual C++ 2008 ではまだ std::tr1 .