内联函数选择标准

时间:2019-05-28 19:02:47

标签: c++ inline one-definition-rule

我有以下内容:

val inputFactory = XMLInputFactory.newFactory()
inputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false)
XmlMapper(inputFactory).apply {
   registerModule(KotlinModule())
}

输出为//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; } (MSVC和GCC),即内联22 a.cpp函数而不是f。在这种情况下选择b.cpp函数的条件是什么?

2 个答案:

答案 0 :(得分:7)

您的代码格式错误,无需诊断。所有内联函数定义在所有翻译单元中都必须相同。

由于您不执行此操作,因此代码格式错误,但是可以编译,也无需引起任何警告或错误。

答案 1 :(得分:2)

您在此处破坏了ODR( O ne D 定义 R ule)并且程序格式错误,不需要进行诊断。

每个内联定义应该相同。