17

using次の 2 つのキーワードの使用方法の違いは何ですか。

using boost::shared_ptr;

using namespace boost;
4

4 に答える 4

35
using boost::shared_ptr;

現在の名前空間shared_ptrの名前空間からのみを含めます。これは、 namespace で修飾せずにboostを使用できることを意味します。 shared_ptrboost

これはusing 宣言と呼ばれます。


using namespace boost;

boost現在のスコープの名前空間にあるすべてのシンボルを含めます。boostこれは、名前空間で修飾しなくても、名前空間内のすべてのシンボルを使用できることを意味しますboost

using ディレクティブと呼ばれます。


なぜあなたはいつもよりも好むべきですusing declarationusing directive

常に first( using declaration) を使用し、second( ) を避ける方が適切です。これは、2 番目の名前空間が現在の名前空間に膨大な数の名前を持ち込む可能性があるため、名前空間の汚染using directiveを引き起こすためです。その多くは不要です。不要な名前が存在すると、意図しない名前の競合が発生する可能性が大幅に高まります。

Herb Sutterの使用法を引用するにはusing directive

using directiveは狂った野蛮人の略奪軍であり、それが通過するところはどこでも無差別破壊の種をまきますunintended conflicts,

于 2011-08-07T13:45:06.077 に答える
4
  • using namespace boostboost名前空間内のすべての名前を修飾なしで表示できるようにします
  • using boost::shared_ptrshared_ptr無条件に見えるようにするだけです。
于 2011-08-07T13:46:26.687 に答える
3

最初のものはusing declaration;と呼ばれます。

2 つ目は と呼ばれusing directiveます。

MSDNを引用:

using ディレクティブと using 宣言の違いに注意してください。

using 宣言により、個々の名前を修飾なしで使用できます。

using ディレクティブを使用すると、名前空間内のすべての名前を修飾なしで使用できます。

于 2011-08-07T13:46:30.890 に答える
1

1 つ目は、boost:: プレフィックスなしで shared_ptr という名前を使用することのみを許可します。2 つ目は、boost:: プレフィックスなしで、boost 名前空間内の任意のすべての名前を使用できるようにします。後者に眉をひそめる人もいますが、私には何の問題もありませんでした。

于 2011-08-07T13:45:49.513 に答える