using
次の 2 つのキーワードの使用方法の違いは何ですか。
using boost::shared_ptr;
と
using namespace boost;
using
次の 2 つのキーワードの使用方法の違いは何ですか。
using boost::shared_ptr;
と
using namespace boost;
using boost::shared_ptr;
現在の名前空間shared_ptr
の名前空間からのみを含めます。これは、 namespace で修飾せずにboost
を使用できることを意味します。 shared_ptr
boost
これはusing 宣言と呼ばれます。
using namespace boost;
boost
現在のスコープの名前空間にあるすべてのシンボルを含めます。boost
これは、名前空間で修飾しなくても、名前空間内のすべてのシンボルを使用できることを意味しますboost
。
using ディレクティブと呼ばれます。
なぜあなたはいつもよりも好むべきですusing declaration
かusing directive
?
常に first( using declaration
) を使用し、second( ) を避ける方が適切です。これは、2 番目の名前空間が現在の名前空間に膨大な数の名前を持ち込む可能性があるため、名前空間の汚染using directive
を引き起こすためです。その多くは不要です。不要な名前が存在すると、意図しない名前の競合が発生する可能性が大幅に高まります。
Herb Sutter
の使用法を引用するにはusing directive
:
using directive
は狂った野蛮人の略奪軍であり、それが通過するところはどこでも無差別破壊の種をまきますunintended conflicts,
。
using namespace boost
boost
名前空間内のすべての名前を修飾なしで表示できるようにしますusing boost::shared_ptr
shared_ptr
無条件に見えるようにするだけです。最初のものはusing declaration
;と呼ばれます。
2 つ目は と呼ばれusing directive
ます。
MSDNを引用:
using ディレクティブと using 宣言の違いに注意してください。
using 宣言により、個々の名前を修飾なしで使用できます。
using ディレクティブを使用すると、名前空間内のすべての名前を修飾なしで使用できます。
1 つ目は、boost:: プレフィックスなしで shared_ptr という名前を使用することのみを許可します。2 つ目は、boost:: プレフィックスなしで、boost 名前空間内の任意のすべての名前を使用できるようにします。後者に眉をひそめる人もいますが、私には何の問題もありませんでした。