gpt4 book ai didi

c++ - boost::fusion::for_each 中的函数对象不同于 std::for_each

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:39 25 4
gpt4 key购买 nike

在升级到更新的编译器并解决编译器错误时,我意识到 boost::fusion::for_each 要求传入的函数对象具有运算符 const

示例来自 Boost :

struct increment
{
template<typename T>
void operator()(T& t) const
{
++t;
}
};
...
vector<int,int> vec(1,2);
for_each(vec, increment());

这当然没有改变。我没有意识到它与 std::for_each 不同,它不要求运算符是 const

struct increment
{
template<typename T>
void operator()(T& t) // no const here!!!
{
++t;
}
};
std::vector<int> numbers;
std::for_each(numbers.begin(), numbers.end(), increment());

是否有任何明显的理由需要 const?我显然不能改变这一点,但我想了解为什么这两者不同。

感谢任何见解和解释!

最佳答案

可能需要常量来防止仿函数的内部状态发生变化,因为没有为序列中的每个元素定义 operator() 调用的顺序。因此,后续调用不应相互依赖。

关于c++ - boost::fusion::for_each 中的函数对象不同于 std::for_each,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7484803/

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