Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 内联函数选择条件_C++_Inline_One Definition Rule - Fatal编程技术网

C++ 内联函数选择条件

C++ 内联函数选择条件,c++,inline,one-definition-rule,C++,Inline,One Definition Rule,我有以下资料: //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; }

我有以下资料:

//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;
}
//a.cpp
内联int f(int x){return x;}
int g(int x){返回f(x);}
//b、 cpp
#包括
内联int f(int x){返回x+1;}
外部INTG(int);
int main(){
std::可以您在这里破坏ODR(OneDDefinitionRule),并且程序不正确,无需诊断

每个内联定义应该是相同的。

您在这里破坏了ODR(OneD定义Rule),并且程序格式不正确,无需诊断


每个内联定义应该相同。

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


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

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


既然您没有这样做,代码的格式是错误的,但是它是允许编译的,并且不需要引起任何警告或错误。

您的意思是您编译并链接了a.cpp和b.cpp吗?是的。没错!这似乎是相关的:您打开优化了吗?我怀疑您可能会对无优化/debu得到不同的答案g构建(无内联)与优化/发布构建(有内联)。你的意思是你编译并链接了a.cpp和b.cpp吗?是的。这似乎很重要:你开启了优化吗?我怀疑你可能会得到一个不同的答案:无优化/调试构建(无内联)与优化/发布构建(有内联)。也许扩展ODR的含义有助于完成此答案。也许扩展ODR的含义有助于完成此答案。也许可以链接到以获取更多详细信息,或者自己更详细地解释ODR?“对于内联函数[…],在使用ODR的每个翻译单元中都需要定义。”没有提到不同的定义。我能说我介绍的是一种未指定的行为吗?@joãopauli no,它是UB。请参阅此处的列表项1:@jo-no..噢,很好!明白了!可能链接到以获取更多详细信息,或者自己更详细地解释ODR?”对于内联函数[…],在使用odr的每个翻译单元中都需要一个定义。“没有提到不同的定义。我能说我所介绍的是一种未指明的行为吗?@joãopauli不,它是UB。请看这里的列表项1:@jo-不..哦,很好!明白了!