我对头文件的使用有以下疑问。
1 - 在注释之后放置 include guards
/* 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
“前向声明”是唯一避免“循环依赖”的方法,对吗?