我是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;
}
有人可以向我解释为什么代码仍然有效吗?
答案 0 :(得分:5)
当您为C库工具包含C ++头时,即对应于C头<cfoo>
的头<foo.h>
时,C库中的名称将在命名空间{{1}中声明}}。但是,另外未指定名称是否也在全局名称空间中声明。
在你的情况下,它们似乎是。但你不能依赖它,你也不能。
答案 1 :(得分:0)
有两种正确的变体,如下:
// C++ header
#include <cctype>
int main()
{
return !std::isalpha('a');
}
// C header
#include <ctype.h>
int main()
{
return !isalpha('a');
}
允许编译器声明超出标准规定的额外名称,但如果它依赖于实现的这些假象,则代码不可移植。
始终为您使用的功能添加正确的标题,您将避免意外。