gpt4 book ai didi

c++ - C++ 类中的内联规则是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:17 24 4
gpt4 key购买 nike

从我很久以前在某处读到的,似乎如果你想在编译阶段内联类成员函数,则必须在类声明 block 中定义该函数。

但这有一个细节泄漏的缺点。恕我直言,其他程序员在打开 .h 文件时应该只看到类接口(interface)。

第一个语句在现代 C++ 中是否仍然正确,曾经是吗?有没有办法强制内联声明的函数,最好是完全在另一个文件中?

在类声明 block 中保留简短的成员函数通常更好吗?

最佳答案

It seems that if you want class member function to be inlined during the compilation phase, the function has to be defined inside class declaration block.

事实并非如此。在类 definition定义 的函数被隐式标记为 inline。但是你不需要在类中定义函数来让它成为inline,你可以显式地请求它:

struct X {
void f();
};
inline void f() {}

另一方面,inline 关键字并不意味着函数将被内联,而是可以定义多个翻译单元,也就是说,如果多个翻译单元包含包含该定义的相同 header ,则链接器不会因多重定义错误而失败。

现在,在实际内联时,编译器可以决定是否内联任何函数,无论该函数是否被声明为inline,只要它看到definition 该函数(它将内联的代码),这就是为什么通常要内联的函数应该在 header 中定义(在类定义内部或标记为 inline 外面。

此外,较新的工具链可以执行整个程序优化 或其他链接时间优化,链接器还可以通过这些优化来决定应该内联一个函数。在这种情况下,函数定义不需要在调用站点可见,因此它可以在 .cpp 文件中定义。但是,如果您真的希望该函数是内联,最好不要依赖此功能,而只需在 header 中定义该函数即可。

关于c++ - C++ 类中的内联规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10867247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com