程序员

C++中的inline使用误区

2018-04-21  本文已影响32人  而立不惑之年

缘由

老代码出现新问题,链接时出现问题。

/tmp/ccODJt0B.o: In function `main':
b.cpp:(.text+0x15): undefined reference to `A::GetAttr(int)'
collect2: error: ld returned 1 exit status

复现

简化代码复现如下:

//a.h
struct A
{
public:
int GetAttr(int i);
};

//a.cpp
#include "a.h"
inline int A:: GetAttr(int i)
{
        return 0;
}
//b.cpp
#include "a.h"
int main()
{
 A a;
 a.GetAttr(0);
 return 0;
}
//gcc  -o a.o -c a.cpp
//gcc  -o b  b.cpp a.o

分开实现实现,为了提高性能,直接加inline措施不正确。如果函数长期没有使用,不会报错,遇到使用时会出现上述的链接错误。
以下两种方式都不正确:

小结

inline 必须实现在头文件,对引用可见。

上一篇下一篇

猜你喜欢

热点阅读