【发布时间】:2017-11-16 00:30:30
【问题描述】:
我想在 C++ 中定义一个内联函数。比如这个函数的头文件fun.h我有
#ifndef FUN_H
#define FUN_H
void fun(int);
#endif // FUN_H
在源文件fun.cpp我有
#include "fun.h"
inline void fun(int a){
return ++a;
}
我知道这是定义内联函数的一种方式,但我确实看到很多人说内联函数的实现应该直接在头文件fun.h中,这意味着以下模式,
#ifndef FUN_H
#define FUN_H
inline void fun(int a){
return ++a;
}
#endif // FUN_H
但是,我不想将所有代码挤在一起,所以我这样编码,
#ifndef FUN_H
#define FUN_H
void fun(int);
inline void fun(int a){
return ++a;
}
#endif // FUN_H
这是一种正确的样式,因此可以将函数视为内联函数吗?
顺便说一句,有人告诉我,如果我将内联函数的定义放在源文件中,可能会导致链接时出现“未定义引用”问题。我确实遇到过一次这个问题,解决方法是删除源文件中的“inline”关键字。但是,仍然有一些函数在源文件中具有内联关键字的定义。这个函数没有触发任何链接错误,所以我现在对使用“inline”关键字的正确方法感到困惑。
有人对此有什么想法吗?
【问题讨论】:
-
当你有函数定义本身时,你不需要函数的原型。当你这样做时你不应该遇到链接问题,
inline关键字特别意味着每个编译单元都可以拥有自己的函数副本。 -
这让我更加困惑,因为当我在 .cpp 文件中的函数之前删除“inline”关键字时,链接错误消失了。它说“未定义对函数的引用......”但我检查了我是如何使用该函数的,还检查了我是否包含了头文件。他们是正确的,但我一直有链接错误,直到我删除了“内联”关键字。
标签: c++ inline header-files