首页 > 解决方案 > 内联函数选择标准

问题描述

我有以下内容:

//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在这种情况下选择功能的标准是什么?

标签: c++inlineone-definition-rule

解决方案


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

由于您不这样做,因此代码格式错误,但允许编译并且不需要引起任何类型的警告或错误。


推荐阅读