4

新しいコンパイラにアップグレードしてコンパイラ エラーを解決しboost::fusion::for_eachているときに、渡された関数オブジェクトに operator が必要であることに気付きました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ますか? 明らかにそれを変更することはできませんが、これら 2 つの違いの理由を理解したいと思います。

洞察と説明をありがとう!

4

1 に答える 1