我对头文件的使用有以下疑问。
1 - 包括在评论后放置的守卫
/* Copyright Note and licence information (multiple lines) */
#ifndef FOO_H
#define FOO_H
// Header file contents
#endif
Herb Sutter 在他的“C++ 编码标准”一书中说,像上面这样的代码是有问题的。他说“#ifndef”语句应该出现在头文件的第一行。我觉得这没有说服力。这是你们/女孩在头文件中的后续吗?
2 - 在头文件中使用命名空间
#ifndef FOO_H
#define FOO_H
namespace FooNameSpace{
// Header file contents
}
#endif
上面的代码是否使用正确的做法?我的意思是,你在头文件中使用命名空间吗?我知道为什么在头文件中导入命名空间是没有意义的,但是像上面这样的声明呢?
如果上述方法是正确的,您如何对另一个命名空间中的类进行“前向声明”?是不是像
#ifndef FOO_H
#define FOO_H
namespace AnotherNameSpace{
class AnotherFoo; // forward declaration
}
namespace FooNameSpace{
// Use AnotherFoo here
}
#endif
“前向声明”是避免“循环依赖”的唯一方法,对吗?