我创建了两个不同的头文件,每个都包含一个具有相同名称的类,并且每个都包含在不同的 cpp 文件中,因此编译器不会抱怨重新定义它们
它们像两个不同的类一样运行,除了当它们具有相同的方法、相同的名称和相同的参数时,只调用其中一个,例如:
//on first cpp:
#include "same1.h"
//...
SameName obj(int_value);
obj.ok(int_value);
obj.not_ok();
//on second cpp
#include "same2.h"
//...
SameName obj(float_value);
obj.ok(float_value);
obj.not_ok();
在这两个文件上,都调用了来自 same1.h 的 not_ok,当然它还没有正确初始化
我知道问题出在哪里以及为什么会发生这种情况,我也熟悉 Name mangling 并且它们在编译时具有完全相同的名称。
我只想知道这是 C++ 的标准行为还是我的编译器是如何实现的,我的意思是,所有编译器是否应该在这种情况下做同样的事情?
我应该提到我在 Debian Linux 上使用 gcc 4.7.1。