C++ C++;包含标题问题
我是c/c++新手,我对以下几点感到困惑:C++ C++;包含标题问题,c++,C++,我是c/c++新手,我对以下几点感到困惑: 我是否应该将类声明放在它自己的头文件中,而将实际实现放在另一个文件中 我应该在example.h文件还是example.cpp文件中放置类似的标题 如果所有类都需要使用,并且我将一个类的头文件包含到另一个类的头文件中,这是否意味着我包含了两次 如果我使用了很多STL类,那么使用std::的好做法是什么 通常,您会将类声明(包括成员声明)放入头文件中,并将成员函数(方法)的定义放入源文件中。标题的名称通常类似于*.h或*.hpp。至于第3点,你应该把in
的标题
,并且我将一个类的头文件包含到另一个类的头文件中,这是否意味着我包含了两次
std::
的好做法是什么通常,您会将类声明(包括成员声明)放入头文件中,并将成员函数(方法)的定义放入源文件中。标题的名称通常类似于
*.h
或*.hpp
。至于第3点,你应该把includeguard放进你的头文件中,这样它们就可以在同一个源文件中安全地包含多次;然后你可以把它们放在任何你需要的地方。我不明白第5点:您是否询问何时使用std:
名称空间限定?对于“包含两次”问题,您的头文件有一个常见模式:
// _BLAHCLASS_H_ should be different for each header, otherwise things will Go Bad.
#ifndef _BLAHCLASS_H_
#define _BLAHCLASS_H_
... rest of header ...
#endif
#include
指令放在何处,则实现文件应包含头文件std::string
的类,则该类的标题将#include
)assert.h
/cassert
,包含多次是有意义的)using namespace std;
这样的using指令,那么它通常(尽管肯定不是普遍)不受欢迎。像using std::vector;
这样的using声明通常被认为问题较少#ifndef FOO_HPP
#define FOO_HPP
class {
...
};
#endif
5.如果我使用了很多STL类,那么使用std的好方法是什么
我认为最好每次都使用std::
而不是使用namespace std
。这样,您将只使用所需的名称空间,您的代码将更具可读性,因为这样可以避免名称空间冲突(想象两个方法具有相同的名称,并且属于两个不同的名称空间)
但最重要的是,问题4到底在哪里
中的不完整类型,您可以避免包含它,但您需要这些类型(请参阅)。然而,为简单起见,如果类型使用模板,我通常会包含相应的标题使用名称空间std
放在头文件中#4的不同程度足以引起它自己的问题这些都是不错的问题,但将所有问题合并为一个问题“过于宽泛”。以两个下划线开头的名称是为编译器实现保留的;您应该为包含保护使用不同的模式(例如,
BLAHCLASS_H_include
).同意一般观点,但使用双下划线的人有什么用(我到处都能看到)。这些名称不是为实现保留的吗?(它们看起来也很难看)有很多方法可以将模板的实现与其声明分开,但这可能超出了这个问题的范围。删除FOO_HPP
之前的双下划线,我将对此进行投票