【发布时间】:2018-09-01 04:43:57
【问题描述】:
我正在尝试在头文件中前向声明的 CPP 文件中定义一个函数。我想知道执行此操作的正确方法,因为我尝试过的所有内容都可以编译和运行,而且我的分析技能还不足以调查函数是否真正内联。
这就是我想做的事情
/// Source.h
void inlined_func(); // what specifiers should I put here?
// I was thinking about doing both `extern` and `__forceinline`
/// Source.cpp
__forceinline void inlined_func()
{
std::cout << "we're in the inlined func" << std::endl;
}
【问题讨论】:
-
标准中不保证声明函数内联会导致内联代码。但是,只要每个翻译单元只有一个定义,您就可以声明和定义内联函数。如果在多个翻译单元中使用,它们也必须相同。像 __forceinline 这样的东西是编译器特定的扩展。
-
是的,@doug,这是有道理的。至于特定的编译器,这就是我有 MSVC++ 标签的原因。我想专门讨论
__forceinline限定符 -
请注意,MSVC++ 不保证 __forceinline 实际上会内联函数。见:msdn.microsoft.com/library/…
-
函数声明默认有外部链接。
标签: c++ visual-c++