通过重载解决方案违反 ODR
即使使用相同的内联函数标记,如果查找名称不是指同一实体,也可能违反 ODR。让我们考虑下面的 func
:
-
header.h
void overloaded(int); inline void func() { overloaded('*'); }
-
Foo.cpp 中
#include "header.h" void foo() { func(); // `overloaded` refers to `void overloaded(int)` }
-
bar.cpp
void overloaded(char); // can come from other include #include "header.h" void bar() { func(); // `overloaded` refers to `void overloaded(char)` }
我们有 ODR 违规,因为 overloaded
指的是不同的实体,具体取决于翻译单元。