我们可以将类及其实现放在单个头文件中吗?

use*_*453 0 c++ header class

我知道模板定义及其实现可以并且必须放在一起,但是(非模板)类怎么样?

就个人而言,我更喜欢把类和它的实现放在一起,如果可能的话,因为它使用起来比较简单,你只需要在项目中包含头文件,不需要打扰实现文件.

Dav*_*eas 5

它可以完成,但是每次更改实现时都会强制类的所有用户重新编译,重新编译也会变慢.为此,您需要函数定义inline.

// in header
struct T {
   void f() { std::cout << "f()\n"; }
   void g();
};

inline void T::g() {
   std::cout << "g()\n";
}
Run Code Online (Sandbox Code Playgroud)

现在问题出现了,如果你的类有静态成员变量,因为那些需要在一个翻译单元中定义.为此,您仍需要提供.cpp.

无论如何,我建议不要采用这种方法.当在罗马时,像罗马人那样做,而在C和C++中意味着单独编译和分割标题和实现文件.

  • @chris:我不这么认为.您可以(在C++ 03和C++ 11中)为整数类型的静态const成员提供值(在C++ 11中可能是任何`constexpr`类型),但不是可变变量.那些需要*定义*某处. (2认同)