Vij*_*jay 26 c++ static solaris compiler-errors inline
任何人都可以告诉我内联函数和静态内联函数之间的区别是什么?
在哪些情况下,我更喜欢静态内联而不是内联?
我问这个问题,因为我有一个内联函数,我在链接(relocation error:... symbol has been discarded with discarded section ...)期间遇到编译问题.我使它成为一个正常的功能,它工作.现在我的一些老人告诉我尝试使用静态内联.以下是我的功能:
inline void wizSendNotifier (const char* nn_name, bpDU* arg=0, int aspect = -1)
{
wizuiNotifier* notifier = ::wizNtrKit.getNotifier (nn_name);
notifier->notify (arg, aspect);
}
Run Code Online (Sandbox Code Playgroud)
而这不是在课堂上.这是在头文件中!
我想对静态函数的调用只能在定义它的特定TU中完成.
由于我的函数是在头文件中,并且如果我将其设置为静态,是否会出现这样的情况:在哪里我包含该头文件,静态函数可以用于该翻译单元?
Ste*_*sop 41
非静态inline函数声明在使用它的每个转换单元(源文件)中引用相同的函数.
一个定义规则要求函数定义的主体在包含它的每个TU中是相同的,具有"相同"的长定义.如果源文件都使用相同的头,并且假设该函数不使用具有内部链接(包括static函数)的任何全局名称或在不同TU中以不同方式定义的任何宏,则通常满足这一点.
我不记得以前遇到过那个特定的链接器错误,但至少有可能这些限制之一是负责的.您有责任满足要求:未定义的行为,如果不满足则无需诊断.
该static inline函数声明是指在每个转换单元不同的功能,这只是恰巧具有相同的名称.它可以使用static不同TU中不同的全局名称或宏,在这种情况下,函数在不同的TU中可能表现不同,即使它在头文件中的定义"看起来相同".
由于这种差异,如果函数包含任何static局部变量,那么它的行为将根据它是否有所不同static.如果是,static那么每个TU都有自己的函数版本,因此它有自己的static局部变量副本.如果它inline只是,那么static所有TU使用的局部变量只有一个副本.
| 归档时间: |
|
| 查看次数: |
17975 次 |
| 最近记录: |