Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么只包含完整的声明和定义? Bjarne Stroustrup先生在第425页中段(〈第四)版的〈C++程序设计语言〉(〈152.2)〉中指出:_C++_Header Files_Declaration_Definition - Fatal编程技术网

为什么只包含完整的声明和定义? Bjarne Stroustrup先生在第425页中段(〈第四)版的〈C++程序设计语言〉(〈152.2)〉中指出:

为什么只包含完整的声明和定义? 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

明智的做法是不要太聪明地使用“包含”。我的建议是: ... 只包含完整的声明和定义

我不明白他是什么意思? 我看到很多代码使用.h文件进行声明,使用.cpp文件进行定义,然后只包含.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"

如果我正确理解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头应该包括在内,所以我真的看不出有什么区别。我真的很难想象为什么要写这样糟糕的代码。我觉得很明显,你不应该这样做,所以我也被这句话弄糊涂了。