c++ - sencillos - sobrecarga de operadores unarios
Espacios de nombres y sobrecarga del operador en C++ (3)
Debe definirlo en el espacio de nombres, ya que la sintaxis será menos detallada y no saturará el espacio de nombres global.
En realidad, si defines tus sobrecargas en la definición de tu clase, esto se convierte en una pregunta discutible:
namespace Lib {
class A {
public:
A operator+(const A&);
};
} // namespace Lib
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 en el espacio de nombres de la biblioteca:
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 mi prueba, ambos parecen funcionar bien. ¿Hay alguna diferencia práctica entre estas dos opciones? ¿Es mejor el enfoque?
Debe definirlos en el espacio de nombres de la biblioteca. El compilador los encontrará de todos modos a través de búsqueda dependiente de argumentos.
No hay necesidad de contaminar el espacio de nombres global.