对于C程序,我知道我需要.h和.cpp来允许多个.h一起读取和编译,但稍后会链接。
但是,对于C ++,我不想将类成员函数声明和定义分解为两部分。虽然它是典型的C ++方式,但我试图在一个头文件中合并成员函数声明和定义。我看到有些人这样做。我想知道是否有任何问题要做到这一点。
std::this_thread::sleep_for(2s);
下的读取行见
class testtest {
void tryagain() {
using namespace std::chrono_literals;
auto twosec = 2s;
std::this_thread::sleep_for(2s);// problem is here
}
};
我不打算争论哪种风格更好,但希望关注它是否有效,以及有什么权衡。
答案 0 :(得分:1)
如果需要,可以将所有实现代码放在.h文件中,这通常取决于具体情况。即使所有代码都在.h文件中,通过执行类似的操作来分割界面和实现通常也是很好的做法
class MyClass {
public:
void doSomethingUseful();
};
....
void MyClass::doSomethingUseful() {
// code goes here....
}
并非所有函数都会自动内联,编译器通常会决定内嵌与否。即使它们位于标题中,也可能不会内联更大的函数。您可以使用inline关键字向编译器提供您希望内联函数的提示,但这不是保证(另外,在.cpp文件中标记为内联的函数将被内联,但只有当从同一个.cpp文件中的其他函数调用时才<)
.h文件中的代码越多,编译时间就越慢,因此最好尽量减少代码中的代码量。我猜你的情况虽然不应该那么明显。
我希望有一些帮助! :)
答案 1 :(得分:1)
您可以在函数周围放置定义,以防止它们被多次实现 头文件: -
class MyClass {
public:
void doSomethingUseful();
};
// inline functions
....
// non inline function
#ifdef MYCLASSCPP
void MyClass::doSomethingUseful() {
// code goes here....
}
#endif
然后在一个CPP文件中定义MYCLASSCPP。 (或编译器参数)。