:: tolower vs std :: tolower的区别

hov*_*ovo 7 c++ stl std stl-algorithm

我有

using namespace std;
vector<char> tmp;
tmp.push_back(val);
...
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试

transform(tmp.begin(), tmp.end(), tmp.begin(), std::tolower);
Run Code Online (Sandbox Code Playgroud)

它无法编译,但这编译:

transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);
Run Code Online (Sandbox Code Playgroud)

有什么问题std::tolower?它适用于一个参数,例如std::tolower(56)编译.谢谢!

Nat*_*ica 3

std::tolower有两个重载,并且无法解决UnaryOperationC 版本::tolower没有的问题。

如果你想使用std::tolower你可以使用 lambda 作为

transform(tmp.begin(), tmp.end(), tmp.begin(), [](unsigned char c) {return std::tolower(c); });
Run Code Online (Sandbox Code Playgroud)

  • 还有一个一元 `std::tolower`,您只需要消除歧义即可。 (3认同)