1

次のコードがあるとします。

using namespace std;
namespace abc {
    void sqrt(SomeType x) {}

    float x = 1;
    float y1 = sqrt(x); // 1) does not compile since std::sqrt() is hidden
    float y2 = ::sqrt(x); // 2) compiles bud it is necessary to add ::
}

::なしでabc名前空間内でstd::sqrtを呼び出す方法はありますか? 私のプロジェクトでは、もともと名前空間を使用していなかったため、オーバーロードされたすべての関数が表示されていました。名前空間 abc を導入すると、オーバーロードによって隠されているすべての関数を手動でチェックし、:: を追加する必要があることを意味します

この問題を処理する正しい方法は何ですか?

4

2 に答える 2

2

一般的using namespace stdに悪い習慣と見なされます: 「名前空間 std の使用」が悪い習慣と見なされるのはなぜですか?

可能な限り明確にすることをお勧めします。そのため、指定することで、std::sqrt()実際に呼び出している関数について混乱が生じることはありません。例えば

namespace abc
{
   void sqrt(SomeType x) {}

   float x = 1;
   float y1 = sqrt(x);
   float y2 = std::sqrt(x);
}
于 2015-02-13T09:55:25.083 に答える