内联所有的方法在c++中,没有Cpp文件

Inline all methods in C++, No Cpp file?

本文关键字:没有 Cpp 文件 c++ 方法      更新时间:2023-10-16

我想用c++编写一个具有最佳运行时性能的应用程序。所以我决定内联所有的方法。

我有这里提到的问题。

如果我在MSVC 2015和MinGW编译器中使用内联关键字在cpp文件内,它会给我未定义的引用错误。

但是如果我想在头文件中内联所有方法,就不需要cpp文件了。这是真的吗?为什么呢?

关键字inline与当今时代的性能无关,也与内联函数无关!

事实上,它与单一定义规则(或ODR)有关!

ODR规定c++程序中每个函数只能有一个定义。

这意味着下面的命令将产生一个错误:

file.cpp

void fun() {}

main.cpp

void fun() {}

这是一个错误,因为在两个不同的翻译单元(.cpp文件)中有相同函数的两个定义,这违反了ODR。

现在inline关键字允许您绕过这个问题。它允许您在多个平移单位中定义相同的函数,只要函数体完全相同!这允许您在头文件中定义函数,然后可以将其包含在多个.cpp文件中。

话虽如此。您所描述的将而不是导致性能下降。编译器将在适当的时间内联正确的函数。它将使你的代码运行得比你自己做的更快。

不,这不是真的。根据定义,main函数不能内联。