c++ 内联函数和静态内联函数之间的差异

任何人都可以告诉我内联函数和静态内联函数之间有什么区别。

在这种情况下,与内联相比,我不得不喜欢静态内联?

我提出这个问题,因为我有一个内联函数,我正在面临编译问题链接(重定位错误:…符号已丢弃与废弃的部分…),我做了一个正常的功能,它的工作。
现在我的一些老年人告诉我用静态内联尝试。
以下是我的功能:

inline void wizSendNotifier (const char* nn_name, bpDU* arg=0, int aspect = -1)
{
   wizuiNotifier* notifier = ::wizNtrKit.getNotifier (nn_name);
   notifier->notify (arg, aspect);
}

这不是在一个类内。这是一个头文件里面!

我猜,静态函数的调用只能在定义的特定TU中完成。

因为我的功能是在一个听筒文件中,如果我使它静态,那么我是否会包括该头文件的静态功能可以使用在该翻译单元?

非静态内联函数声明是指使用它的每个翻译单元(源文件)中的相同函数。

一个定义规则要求功能定义的主体在包含它的每个TU中是相同的,具有“相同”的较长的定义。这通常是满足的,只要源文件都使用相同的标题,并且前提是该函数不使用具有内部链接(包括静态函数)的任何全局名称或在不同的TU中以不同方式定义的任何宏。

我不记得以前遇到过特定的链接器错误,但是这些限制之一至少是可以承担的。您有责任满足要求:未定义的行为,如果没有,则不需要诊断。

静态内联函数声明指的是每个翻译单元中的一个不同的函数,只是这样就有相同的名称。它可以使用不同TU中不同的静态全局名称或宏,在这种情况下,即使在头文件中的定义“看起来一样”,该功能在不同的TU中可能会有所不同。

由于这个差异,如果函数包含任何静态局部变量,那么根据它是否是静态的,它的行为会有所不同。如果它是静态的,那么每个TU都有自己的版本的函数,因此它自己的静态局部变量的副本。如果只是内联,那么所有TU使用的静态局部变量只有一个副本。

翻译自:https://stackoverflow.com/questions/12836171/difference-between-an-inline-function-and-static-inline-function

转载注明原文:c++ 内联函数和静态内联函数之间的差异