为什么只包含完整的声明和定义? Bjarne Stroustrup先生在第425页中段(〈第四)版的〈C++程序设计语言〉(〈152.2)〉中指出:
明智的做法是不要太聪明地使用“包含”。我的建议是: ... 只包含完整的声明和定义 我不明白他是什么意思? 我看到很多代码使用.h文件进行声明,使用.cpp文件进行定义,然后只包含.h文件。为什么只包含完整的声明和定义? Bjarne Stroustrup先生在第425页中段(〈第四)版的〈C++程序设计语言〉(〈152.2)〉中指出:,c++,header-files,declaration,definition,C++,Header Files,Declaration,Definition,明智的做法是不要太聪明地使用“包含”。我的建议是: ... 只包含完整的声明和定义 我不明白他是什么意思? 我看到很多代码使用.h文件进行声明,使用.cpp文件进行定义,然后只包含.h文件。 那么他所说的建议到底是什么意思呢?如果我正确理解Stroustrup,那么这些是“完整”的声明: // foo.h void foo(); struct S { int bar() const; }; 这些是“不完整”的声明,您不应该编写如下标题: // bar_start.h struct Ba
那么他所说的建议到底是什么意思呢?如果我正确理解Stroustrup,那么这些是“完整”的声明:
// foo.h
void foo();
struct S {
int bar() const;
};
这些是“不完整”的声明,您不应该编写如下标题:
// bar_start.h
struct Bar {
// bar_end.h
};
做:
不要:
#include "bar_start.h"
void foo(); // foo is a member of Bar
#include "bar_end.h"
如果我正确理解Stroustrup,这些是“完整”声明:
// foo.h
void foo();
struct S {
int bar() const;
};
这些是“不完整”的声明,您不应该编写如下标题:
// bar_start.h
struct Bar {
// bar_end.h
};
做:
不要:
#include "bar_start.h"
void foo(); // foo is a member of Bar
#include "bar_end.h"
我通过这本书的作者(比亚恩·斯特劳斯特鲁普)的电子邮件问了这个问题,以确定他的意思。 他回答说: 考虑: h在哪里
class X {
X();
X(const X& a);
X(X&&);
// ... and more ...
这种“聪明”的结果是,将一个定义扩展到多个文件,导致无法维护的混乱
我通过这本书的作者(比亚恩·斯特劳斯特鲁普)的电子邮件问了这个问题,以确定他的意思。 他回答说: 考虑: h在哪里
class X {
X();
X(const X& a);
X(X&&);
// ... and more ...
这种“聪明”的结果是,将一个定义扩展到多个文件,导致无法维护的混乱
结构和类也被定义,通常在头文件中。通常是模板和内联函数。结构和类也被定义,通常在头文件中。和通常的模板和内联函数一样,@user463035818头是要包含在内的,所以我真的看不出有什么区别。我真的很难想象为什么要写这样糟糕的代码。我觉得很明显,你不应该这样做,所以我也被这句话弄糊涂了。@user463035818头应该包括在内,所以我真的看不出有什么区别。我真的很难想象为什么要写这样糟糕的代码。我觉得很明显,你不应该这样做,所以我也被这句话弄糊涂了。