C++内联函数的定义必须在同一个文件中吗?

问题描述 投票:0回答:3

我定义了一个函数

show()
并内嵌在名为
ex.h
的头文件中,并在
ex.cpp
中定义了该函数。我预计这会给我一个错误,因为编译器不知道在调用
show()
函数的位置替换什么。但因为我使用的是 IDE,所以它工作得很好。怎么会发生这种事?

顺便说一句,当我尝试手动编译它时,它给了我一个错误,即使用了

show()
但未定义。

c++ function inline
3个回答
35
投票

函数的定义(

{...}
之间的部分)必须放置在头文件中,除非该函数仅在单个
.cpp
文件中使用。
特别是,如果将内联函数的定义放入
.cpp
文件中,并从其他
.cpp
文件调用它,则会从链接器收到
"unresolved external"
错误。

[了解更多]


8
投票

我们通常将内联函数放在头文件中,以便编译器在编译使用该函数的代码时可以看到其定义。这样它就可以与所有编译器一起使用。

某些编译器具有立即优化整个程序的功能(整个程序优化链接时间优化)。这些编译器可以内联函数,即使它是在不同的 .cpp 文件中定义的。


4
投票

通常整个内联函数都位于 .h 中 原因是编译器必须预先查看整个内联定义。 内联函数是通过直接“粘贴”发出的机器语言来编译的。

© www.soinside.com 2019 - 2024. All rights reserved.