为什么<cmath>函数不需要“使用std :: xxx”?

时间:2015-12-12 13:46:35

标签: c++ namespaces c++-standard-library

对于您可以包含的所有其他标准库头文件,必须通过以下任何方法指定命名空间:

using namespace std;
using std::xxx;
int main() {
    std::xxx;
}

我到目前为止遇到的唯一例外是在<cmath>库中,到目前为止我所使用的所有函数都不需要上述任何函数,以便在不指定命名空间的情况下使用它们。那是为什么?

注意:我可能错了<cmath>是唯一不需要指定命名空间的标准库头,或者<cmath>中的每个函数都是这样的。我刚刚没有遇到过我在日常使用中所说的例外情况。

1 个答案:

答案 0 :(得分:3)

C ++标准允许实现将标准C头中声明的名称放在全局命名空间中。

来自C ++标准(17.6.1.2标题)

  
      
  1. ...但是,在C ++标准库中,声明(在C中定义为宏的名称除外)在命名空间范围内   命名空间std的(3.3.6)。这些名称是否未指明   首先在全局命名空间范围内声明,然后是   通过显式使用声明(7.3.3)注入到命名空间std中。
  2.