Al crear una biblioteca en un espacio de nombre particular, a menudo es conveniente proporcionar operadores sobrecargados para las clases en ese espacio de nombres. Parece (al menos con g ++) que los operadores sobrecargados pueden implementarse ya sea en espacio de nombres de la biblioteca:Espacios de nombres y sobrecarga del operador en C++
namespace Lib {
class A {
};
A operator+(const A&, const A&);
} // namespace Lib
o el espacio de nombres global
namespace Lib {
class A {
};
} // namespace Lib
Lib::A operator+(const Lib::A&, const Lib::A&);
De mis pruebas, ambos parecen funcionar bien. ¿Hay alguna diferencia práctica entre estas dos opciones? ¿Es mejor el enfoque?
Otra razón para usar el espacio de nombres de la biblioteca: [esta publicación] (http://stackoverflow.com/questions/5195512/namespaces-and-operator-resolution) contiene un ejemplo donde el uso del espacio de nombres global no funciona. – Tim