【发布时间】:2019-05-28 19:02:47
【问题描述】:
我有以下几点:
//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.cppf函数被内联而不是b.cpp一个。在这种情况下选择f函数的标准是什么?
【问题讨论】:
-
你的意思是你编译链接了a.cpp和b.cpp?
-
是的。没错!
-
这似乎相关:One Definition Rule
-
你开启优化了吗?我怀疑对于无优化/调试构建(无内联)与优化/发布构建(内联),您可能会得到不同的答案。
标签: c++ inline one-definition-rule