在 C++ 中内联所有方法,没有 Cpp 文件?
Inline all methods in C++, No Cpp file?
我想用 C++ 编写一个具有最佳运行时性能的应用程序。所以我决定内联所有方法。
我有提到的问题 here。
如果我在 MSVC 2015 和 MinGW 编译器中的 cpp 文件中使用 inline 关键字,它会给我未定义的引用错误。
但是如果我想在头文件中内联所有方法,就不需要cpp文件了。真的吗?这是为什么?
不,这不是真的。根据定义,您的主要功能不能内联。 See this link for more information.
关键字inline
与当今时代的性能无关,与内联函数无关!
事实上它与单一定义规则(或 ODR)有关!
ODR 指出 C++ 程序的每个函数只能有一个定义。
这意味着以下将产生错误:
file.cpp
void fun() {}
main.cpp
void fun() {}
这是一个错误,因为在两个不同的翻译单元(.cpp
文件)中存在同一个函数的两个定义,这违反了 ODR。
现在 inline
关键字可以让您绕过这个问题。它允许你在多个翻译单元中定义同一个函数,只要函数体完全一样即可!这允许您在头文件中定义函数,然后可以将其包含到多个 .cpp
文件中。
话虽这么说。您描述的内容 不会 导致性能下降。编译器会在适当的时候内联正确的函数。它将使您的代码 运行 比您自己编写的速度更快。
我想用 C++ 编写一个具有最佳运行时性能的应用程序。所以我决定内联所有方法。
我有提到的问题 here。
如果我在 MSVC 2015 和 MinGW 编译器中的 cpp 文件中使用 inline 关键字,它会给我未定义的引用错误。
但是如果我想在头文件中内联所有方法,就不需要cpp文件了。真的吗?这是为什么?
不,这不是真的。根据定义,您的主要功能不能内联。 See this link for more information.
关键字inline
与当今时代的性能无关,与内联函数无关!
事实上它与单一定义规则(或 ODR)有关!
ODR 指出 C++ 程序的每个函数只能有一个定义。
这意味着以下将产生错误:
file.cpp
void fun() {}
main.cpp
void fun() {}
这是一个错误,因为在两个不同的翻译单元(.cpp
文件)中存在同一个函数的两个定义,这违反了 ODR。
现在 inline
关键字可以让您绕过这个问题。它允许你在多个翻译单元中定义同一个函数,只要函数体完全一样即可!这允许您在头文件中定义函数,然后可以将其包含到多个 .cpp
文件中。
话虽这么说。您描述的内容 不会 导致性能下降。编译器会在适当的时候内联正确的函数。它将使您的代码 运行 比您自己编写的速度更快。