使用isalpha函数时不需要std命名空间

时间:2016-07-08 08:51:22

标签: c++ namespaces std using

我是C ++的初学者。据我所知,为了使用名称,我们必须包含由该名称组成的库。此后,我们可以预先添加命名空间的名称或使用using关键字。

E.g。

不使用关键字:

std::cout << "Hello Word!" << std::endl;

使用关键字:

using namespace std;
cout << "Hello World!" << endl;

我在网上看到了一个使用isalpha名称空间中locale库中的std名称的在线代码示例。但是,该样本不使用上述任何方法。

E.g。

#include <iostream>
#include <locale>
int main() {
  std::cout << isalpha('a') << std::endl;
}

有人可以向我解释为什么代码仍然有效吗?

2 个答案:

答案 0 :(得分:5)

当您为C库工具包含C ++头时,即对应于C头<cfoo>的头<foo.h>时,C库中的名称将在命名空间{{1}中声明}}。但是,另外未指定名称是否也在全局名称空间中声明。

在你的情况下,它们似乎是。但你不能依赖它,你也不能。

答案 1 :(得分:0)

有两种正确的变体,如下:

  1. // C++ header
    #include <cctype>
    int main()
    {
        return !std::isalpha('a');
    }
    
  2. // C header
    #include <ctype.h>
    int main()
    {
        return !isalpha('a');
    }
    
  3. 允许编译器声明超出标准规定的额外名称,但如果它依赖于实现的这些假象,则代码不可移植。

    始终为您使用的功能添加正确的标题,您将避免意外。