C ++是否会从不同的命名空间中重载所有相同名称的函数,并自动检测哪一个用于您?例如,以下代码调用函数 Concat 而不指定其名称空间:
namespace nsA {
class A { public: A(std::string s): val(s) {}; std::string val; };
void Concat(A &aa, A &a1, A &a2) { aa = A(a1.val + a2.val); }
};
namespace nsB {
class B: public nsA::A { public: B(std::string s): nsA::A(s + " ") {} };
void Concat(B &bb, B &b1, B &b2) { bb = B(b1.val + b2.val + "!"); }
};
void main() {
nsA::A a1("Hello"), a2("World"), aa("");
nsB::B b1("Hello"), b2("World"), bb("");
Concat(aa, a1, a2); Concat(bb, b1, b2); // namespace not specified
std::cout << aa.val << std::endl << bb.val << std::endl;
}
主要功能的输出:
HelloWorld
Hello World !
如果没有使用命名空间,而不使用 namespace :: function 调用函数,为什么它可以工作?即使它有效,是否有更好的做法来重载来自不同类和命名空间的函数?