C++的.h文件中的几个问题,为何需要定义宏?

我看到一个项目中的.h 文件,内容如下:

#ifndef _RANGE_REQUEST_GENERATOR_H_
#define _RANGE_REQUEST_GENERATOR_H_

#include <string>

namespace httptest {

void GenerateHeadRequestWithRange(const std::string& verb, 
                                  const std::string& path, const std::string& host,
                                  int start, int step, int limit,
                                  std::string* output);

}  // namespace 
#endif  // _RANGE_REQUEST_GENERATOR_H_

我有几个问题:
1)宏定义_RANGE_REQUEST_GENERATOR_H_ 这个有何作用?我在整个项目中也只看到这个.h文件才有_RANGE_REQUEST_GENERATOR_H_,其他文件没有使用到:

#ifndef _RANGE_REQUEST_GENERATOR_H_
#define _RANGE_REQUEST_GENERATOR_H_
#endif  

2)为何需要在方法定义外添加namespace包裹?为何不使用std命名空间呢,它有什么好处?

namespace httptest {
    方法
}

3)这里的std::string指的是标准命名空间下的string模块吗?与现在的httptest命名空间区别开来,是这个意思吗?

阅读 2k
1 个回答
  1. 防止头文件被重复引入。
  2. 防止冲突,比如你在自己的库里,写一个 sort 函数时就不能用 std,因为已被用掉了。
    当然你可以不放在命名空间中,但这样用你的库的人就不能定义 sort 了。
  3. C++ 中没有模块,std::string 指的是 std 中的 string 类。
    当然命名空间中不一定是类。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题