c++ - 在 C++ 中内联所有方法,没有 Cpp 文件?

标签 c++ performance inline header-files

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

我有提到的问题here .

如果我在 MSVC 2015 和 MinGW 编译器中的 cpp 文件中使用 inline 关键字,它会给我 undefined reference 错误。

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

最佳答案

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

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

ODR 声明 C++ 程序中的每个函数只能有一个定义。

这意味着以下将产生错误:

文件.cpp

void fun() {}

main.cpp

void fun() {}

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

现在 inline 关键字可以让您绕过这个问题。它允许你在多个翻译单元中定义同一个函数,只要函数体完全一样即可!这允许您在头文件中定义函数,然后可以将其包含到多个 .cpp 文件中。

话虽这么说。您描述的内容不会导致性能下降。编译器会在适当的时候内联正确的函数。它将使你的代码运行得比你自己做的更快。

关于c++ - 在 C++ 中内联所有方法,没有 Cpp 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40366796/

相关文章:

android - GPU 与 CPU 编程 : inconsistencies in processing times

c++ - 如何生成动态生成 C++ 定义调用

c# - 在 ToDictionary 之前执行 ToList() 是否更好?

c++ - G++ 不接受 C++ 中的内联构造函数

c# - 如何在 C++ 和 C# 之间共享一个大字节数组

java - 将 Loadrunner 文件参数转换为有效负载的 Java 字符串

mysql - SQL/MySQL 中 OR 条件的数量

html - 如何使用内联样式删除 UL 标签的 CSS 属性值

c++ - VS 2010 中返回值的编译器优化

c++ - 将 std::thread 分配给 vector<std::thread> 时出现段错误