#include <cmath> vs C++程序中的#include <math.h>

Vio*_*ffe 10 c c++ coding-style include header-files

在C++程序中包含前者而不是后者有哪些考虑因素?我总是包括math.h,stdlib.h从不cmath,cstdlib等等.我不明白后者甚至存在的原因,有人可以请赐教吗?

Jos*_*eld 22

更喜欢包含<c ...>标题.它们是C++标准库头.<... .h>标头是由C标准库定义的标头:

C++标准库还提供C标准库的功能,经过适当调整以确保静态类型安全.

大多数情况下,C++标头的内容与相应的C库标头相同,只是名称在std名称空间中定义.

除第18条至第30条和附件D中所述外,每个标题的内容cname应与相应标题的内容相同name.h,如C标准库(1.2)或C Unicode TR中所规定,视情况而定包容性.但是,在C++标准库中,声明(除了在C中定义为宏的名称除外)都在命名空间std的命名空间范围(3.3.6)内.未指定是否首先在全局命名空间范围内声明这些名称,然后通过显式using-declarations将这些名称注入到命名空间std中

  • @VioletGiraffe也许你误读了.我说"更喜欢包含`<c ...>`标题." `std`命名空间可以帮助您避免名称污染.C++标头也有一些变化,使它们对C++更有用. (5认同)
  • @VioletGiraffe在C++ 03中曾经有很好的理由(除了供应商没有在法律条文中实施规则).在我看来,在C++ 11中,整个事情搞得一团糟,因为供应商*也被允许在`std ::`命名空间之外引入名称. (5认同)
  • 更喜欢它的唯一理由是风格,真的.我通常更喜欢它,因为我正在编写C++,所以为什么不使用C++头文件.但它并没有真正有所作为,你也可以使用C风格的标题 (2认同)
  • "帮助您避免名称污染" - 不是"未指定这些名称是否首先在全局命名空间范围内声明" (2认同)