,当我读了一些C++初学者的示例代码,我在TOUPPER在下面一行的用法不解:其命名空间确实TOUPPER属于
std::transform(data.begin(), data.end(), data.begin(), ::toupper);
从上面的线,我知道, “变换”来自命名空间std,但我不知道toupper来自哪个名称空间。也许有一个C++的默认名称空间,但这只是我的猜测。那么你能解释一下toupper在我这里的用法吗?
,当我读了一些C++初学者的示例代码,我在TOUPPER在下面一行的用法不解:其命名空间确实TOUPPER属于
std::transform(data.begin(), data.end(), data.begin(), ::toupper);
从上面的线,我知道, “变换”来自命名空间std,但我不知道toupper来自哪个名称空间。也许有一个C++的默认名称空间,但这只是我的猜测。那么你能解释一下toupper在我这里的用法吗?
如果包括
<cctype>
然后TOUPPER()是在空间std。如果包含
<ctype.h>
then toupper()在全局命名空间中。 (在一个一切如果不是在一个特定的空间中定义的结束。一个你指的是与领先的::
当你在一个特定的命名空间是。)
该规则同样适用于<cstring>
与<string.h>
,<cstdlib>
VS <stdlib.h>
等
如果您对:: toupper语法感到困惑,它会告诉您在这种情况下,函数位于全局名称空间中。你总是可以在名称前面加一个双冒号,这会告诉编译器检查全局命名空间,而不是从内部命名空间中搜索。
void foo() { std::cout << "global"; }
namespace inner {
void foo() { std::cout << "inner"; }
void call() {
foo(); // prints inner
::foo(); // prints global
::inner::foo(); // prints inner (fully qualified namespace)
}
}