-1

次のコードを検討してください。

namespace myNS {
class MyClass {

//.....
};
} //end of namespace myNS


using namespace myNS;

//overloading of '<<' operator
std::ostream &myNS::operator<<(std::ostream &os, MyClass &c){  /*....*/ } 

最後の行で、なぜ&myNS::必要なのですか?

4

2 に答える 2

2

&従来、ストリーミング演算子はストリームへの参照を返し、チェーンできるようにするために必要です。

stream << something << something_else;

によってsomething_else返されるストリーム参照に渡されstream << somethingます。

myNS::この演算子が名前空間内にスコープされることになっている場合は必要です。その場合、名前空間内に以前の宣言も必要です。オペレーターを現在の名前空間 (この例ではおそらくグローバル名前空間) に配置する場合は、必要ありません。

于 2012-09-01T15:15:52.483 に答える
1

std::ostream& operator<<(std::ostream&, MyClass&)は名前空間内で宣言されていないためmyNS、修飾する必要はありません。次の同等のコードは有効です。

#include <iostream>

namespace Foo
{ 
class Bar{}; 
}

using namespace Foo;

std::ostream& operator<<(std::ostream& o, const Bar&) { return o;}

int main() 
{
  Foo::Bar b;
  std::cout << b << "\n";
}
于 2012-09-01T15:30:31.707 に答える