内联函数选择标准
inline function choose criteria
我有以下内容:
//a.cpp
inline int f(int x) { return x; }
int g(int x) { return f(x); }
//b.cpp
#include <iostream>
inline int f(int x) { return x + 1; }
extern int g(int);
int main() {
std::cout << g(2) << f(2) << std::endl;
}
输出是 22
(MSVC 和 GCC),也就是说,a.cpp
f
函数被内联而不是 b.cpp
一个。在这种情况下选择 f
函数的标准是什么?
你在这里破坏了 ODR (One Definition Rule) 并且有病形成的程序,不需要诊断。
每个内联定义应该相同。
您的代码是 ill-formed,不需要诊断。所有内联函数定义在所有翻译单元中必须相同。
由于您不这样做,代码是 ill-formed,但它可以编译并且不需要引起任何类型的警告或错误。
我有以下内容:
//a.cpp
inline int f(int x) { return x; }
int g(int x) { return f(x); }
//b.cpp
#include <iostream>
inline int f(int x) { return x + 1; }
extern int g(int);
int main() {
std::cout << g(2) << f(2) << std::endl;
}
输出是 22
(MSVC 和 GCC),也就是说,a.cpp
f
函数被内联而不是 b.cpp
一个。在这种情况下选择 f
函数的标准是什么?
你在这里破坏了 ODR (One Definition Rule) 并且有病形成的程序,不需要诊断。
每个内联定义应该相同。
您的代码是 ill-formed,不需要诊断。所有内联函数定义在所有翻译单元中必须相同。
由于您不这样做,代码是 ill-formed,但它可以编译并且不需要引起任何类型的警告或错误。