要转换字符串并将其设为小写,我们可能会执行以下操作:
#include <iostream>
#include <algorithm>
#include <string>
#include <cctype>
using namespace std;
int main()
{
string str("Sample STRING");
cout << str << endl;
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
cout << str << endl;
return 0;
}
我知道std::transform
的全部内容;但是范围运算符::
在函数tolower
前做了什么?
如果删除范围运算符,则编译器会抱怨函数不匹配。如果我在std
运算符前面添加::
,那么编译器也会抱怨函数不匹配。范围运算符在tolower
前面的用途是什么?我不知道它叫什么,我到处寻找解释,但无济于事。
答案 0 :(得分:6)
#include <algorithm>
使用std::transform
。tolower
功能在ctype.h
或cctype
中定义。您应该包含其中一个标题。前者在全局命名空间中声明tolower
;后者在std
命名空间中声明它。::
,您可能会选择std::tolower
标头中声明的功能模板<locale>
。当然,这只会因为你有using namespace std;
而发生。这是using namespace std;
如何危险的一个特例。::
意味着右边的名字将是&#34;在全球范围内查找&#34;并且会找到全局tolower
而不是std::tolower
。 (因此,您应#include <ctype.h>
确保获得全局声明。)答案 1 :(得分:5)
::
没有左侧绕过查看所有可访问的子范围并强制使用根(或全局)范围。