可能的重复:
C++ 中的内联函数 https://stackoverflow.com/questions/2501776/inline-functions-in-c
如果我在头文件中完全实现一个类,编译器会做什么?典型示例如下:
class MyException
{
public:
explicit MyException(const char* file, int line) file(file), line(line) {};
const char* getFile() const { return file };
int getLine() const { return line };
private:
const char* const file;
const int line;
};
我的意图是像这样使用该类:throw MyException(__FILE__, __LINE__)
.
我将此头文件包含到每个 .cpp 文件中。我想编译器会根据类的定义多次编译该类,并将(相同的)机器代码包含到它生成的每个目标文件中。现在,链接器会做什么?我尝试了一个更简单的例子(没有那些讨厌的const
's)并且编译得很好。
如果我在头文件中实现一个三屏长的 C 函数而不是一个简单的类,会发生什么?最后一个问题是,我应该将示例拆分为 .h 和 .cpp 文件吗?
所有方法都将是内联方法。您可能会在整个编译过程中损失一些最少的时间,但这没关系。据我所知,唯一可能发生的问题是如果您有一个静态非成本成员变量。然后你必须为它分配一个存储位置(如果需要,可以放置一个定义和初始值)大概在.cpp
否则你会得到关于多重定义的链接器错误。
我见过只有标头的项目main()
CPP 中的函数,但它是高度模板化的。
C++17 更新:您可以将静态非常量成员声明为inline
从 C++17 开始就在你的头文件中。这使得仅头文件库很容易成为可能,而无需像内联函数内的静态变量之类的体操。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)