通過過載解決方案違反 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
指的是不同的實體,具體取決於翻譯單元。