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

No need for std namespace when using isalpha function

我是 C++ 的初学者。据我了解,为了使用名称,我们必须包含包含该名称的库。此后,我们可以在命名空间的名称前添加或使用 using 关键字。

例如

不使用关键字:

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

使用关键字:

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

我在网上看到一个工作代码示例,它使用 std 命名空间中 locale 库中的 isalpha 名称。但是,该示例未使用上述任何方法。

例如

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

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

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

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

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

  1. // C++ header
    #include <cctype>
    int main()
    {
        return !std::isalpha('a');
    }
    
  2. // C header
    #include <ctype.h>
    int main()
    {
        return !isalpha('a');
    }
    

允许编译器声明超出标准指定的额外名称,但如果您的代码依赖于此类实现的人工制品,则它不可移植。

始终为您使用的函数包含正确的 headers,这样您就可以避免意外。