使用 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
。但是,另外未指定这些名称是否也在全局命名空间中声明。
在你的情况下,他们似乎是。但是你不能依赖它,你也不应该依赖它。
有两个正确的变体,如下:
// C++ header
#include <cctype>
int main()
{
return !std::isalpha('a');
}
// C header
#include <ctype.h>
int main()
{
return !isalpha('a');
}
允许编译器声明超出标准指定的额外名称,但如果您的代码依赖于此类实现的人工制品,则它不可移植。
始终为您使用的函数包含正确的 headers,这样您就可以避免意外。
我是 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
。但是,另外未指定这些名称是否也在全局命名空间中声明。
在你的情况下,他们似乎是。但是你不能依赖它,你也不应该依赖它。
有两个正确的变体,如下:
// C++ header #include <cctype> int main() { return !std::isalpha('a'); }
// C header #include <ctype.h> int main() { return !isalpha('a'); }
允许编译器声明超出标准指定的额外名称,但如果您的代码依赖于此类实现的人工制品,则它不可移植。
始终为您使用的函数包含正确的 headers,这样您就可以避免意外。