【问题标题】:::tolower vs std::tolower difference [duplicate]::tolower vs std::tolower 差异[重复]
【发布时间】:2015-10-13 22:05:43
【问题描述】:

我有

using namespace std;
vector<char> tmp;
tmp.push_back(val);
...

现在当我尝试

transform(tmp.begin(), tmp.end(), tmp.begin(), std::tolower);

编译失败,但编译成功:

transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);

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

【问题讨论】:

标签: c++ stl std stl-algorithm


【解决方案1】:

std::tolower 有两个重载,对于 C 版本 ::tolower 没有的 UnaryOperation 无法解析。

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

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

【讨论】:

  • 还有一个一元std::tolower,你只需要消除歧义。
  • @BaummitAugen,可以通过&amp;std::tolower消除歧义吗?
  • @AaronMcDaid 我不这么认为,但如果你愿意,你可以试试。 :)
  • 我相信消歧应该是这样的:(int(*)(int)) &amp;std::tolower。也许(int(int)) std::tolower 会起作用,但可能不会。
  • @celticminstrel,前者的作品,有或没有&amp;。但我猜&amp; 更清楚地表明了意图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 2013-03-02
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多