我有以下 2 个文件,它们声明了相同的名称class C
:
// C1.cpp
class C {
public: void foo (int, float);
};
int main () {
C c;
c.foo(1, 2.3);
}
void C::foo (int, float) {}
// C2.cpp
class C {
public:
int i; // <--- extra variable
void foo (int, float); // <--- non static
};
void foo () {
C c;
c.foo(0, 0.0);
c.i = 0;
}
它编译得很好g++ C1.cpp C2.cpp
!
- 为什么只有名称相同 但主体不同时没有编译器/链接器错误?
- 为什么单一的定义
C::foo(..)
既适用于static
静态版本又适用于非静态版本? - 或者,如果这只是编译器的另一个未定义行为案例,我们可以阻止它吗?