gpt4 book ai didi

c++ - 将 std::tolow 与 std::transform 一起使用

转载 作者:行者123 更新时间:2023-12-05 00:51:30 25 4
gpt4 key购买 nike

我想了解为什么使用 std:: 完全限定会导致以下使用 std::transform 的编译错误。

#include <algorithm>
int main() {
std::string str;
std::transform(str.begin(), str.end(), str.begin(), std::tolower); // does not compile

std::transform(str.begin(), str.end(), str.begin(), ::tolower); // OK
}

不能推导出一元运算符的错误。

source>: In function 'int main()':
<source>:4:19: error: no matching function for call to 'transform(std::__cxx11::basic_string<char>::iterator, std::__cxx11::basic_string<char>::iterator, std::__cxx11::basic_string<char>::iterator, <unresolved overloaded function type>)'
4 | std::transform(str.begin(), str.end(), str.begin(), std::tolower);
| ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /opt/compiler-explorer/gcc-11.2.0/include/c++/11.2.0/algorithm:62,
from <source>:1:
/opt/compiler-explorer/gcc-11.2.0/include/c++/11.2.0/bits/stl_algo.h:4285:5: note: candidate: 'template<class _IIter, class _OIter, class _UnaryOperation> constexpr _OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation)'
4285 | transform(_InputIterator __first, _InputIterator __last,
| ^~~~~~~~~
/opt/compiler-explorer/gcc-11.2.0/include/c++/11.2.0/bits/stl_algo.h:4285:5: note: template argument deduction/substitution failed:
<source>:4:19: note: couldn't deduce template parameter '_UnaryOperation'
4 | std::transform(str.begin(), str.end(), str.begin(), std::tolower);
| ~~~~~~~~~~~~~~^~~~~~~

最佳答案

您需要指定onetolower你想要的 std 命名空间中的函数:

std::transform(str.begin(), str.end(), str.begin(), static_cast<int(*)(int)>(std::tolower));

请注意,您还缺少 stringcctype 包含。

关于c++ - 将 std::tolow 与 std::transform 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71711045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com