为什么下面的
using ::foo
声明会隐藏所有其他的 foo
函数呢?#include <iostream>
void foo(double) { std::cout << "::foo(double)" << std::endl; }
struct A {
void foo(float) { std::cout << "A::foo(float)" << std::endl; }
void foo(int) { std::cout << "A::foo(int)" << std::endl; }
void foo() { std::cout << "A::foo()" << std::endl; }
};
struct B : A {
using A::foo;
void foo(int) { std::cout << "B::foo(int)" << std::endl; }
void foo() { std::cout << "B::foo()" << std::endl; }
void boo() {
using ::foo;
foo(1.0);
foo(1.0f);
foo(1);
foo();
};
};
int main() {
B b;
b.boo();
return 0;
}
B::foo()
了吗? - yizzlezusing B::foo;
。 - Deduplicatorusing
是一种方便的方法。当你有冲突或需要指定作用域时,不要使用它!而且,using ::foo;
的意义是什么,除了让foo
成为::foo
之外? - crashmstr