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

No need for std namespace when using isalpha function

本文关键字:std 命名空间 不需要 isalpha 函数 使用      更新时间:2023-10-16

我是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++ 标头(即对应于 C 标头<foo.h>的标头<cfoo>)时,C 库中的名称将在命名空间std中声明。但是,此外,未指定名称是否也在全局命名空间中声明。

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

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

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

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

始终为您使用的函数包含正确的标头,您将避免意外。