Warum kann for_each sein Funktionsargument nicht ändern?

http://www.cplusplus.com/reference/algorithm/for_each/
Unäre Funktion, die ein Element im Bereich als Argument verwendet. Dies kann entweder ein Zeiger auf eine Funktion oder ein Objekt sein, dessen Klasse operator () überlädt. Gegebenenfalls wird der Rückgabewert ignoriert.

In diesem Artikel habe ich erwartet, dass for_each das als drittes Argument angegebene Objekt tatsächlich ändert, aber es scheint, als würde for_each ein temporäres Objekt bearbeiten und das ihm zugewiesene Objekt nicht einmal ändern.

Warum wird es also so implementiert? Es scheint viel weniger nützlich zu sein. Oder habe ich etwas falsch verstanden und mein Code unten enthält Fehler?

#include <iostream>
#include <vector>
#include <algorithm>

template <class T> struct Multiplicator{
    T mresult;
  public:
    const T& result() const{return mresult;}
    Multiplicator(T init_result = 1){
      mresult = init_result;
    }
    void operator()(T element){
      mresult *= element;
      std::cout << element << " "; // debug print
    }
};

int main()
{
    std::vector<double> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    Multiplicator<double> multiply;
    std::for_each(vec.begin(),vec.end(),multiply);
    std::cout << "\nResult: " << multiply.result() << std::endl;
    return 0;
}

Erwartete Ausgabe:

1 2 3 Result: 6

Bekam aber folgende Ausgabe:

1 2 3 Result: 1

Antworten auf die Frage(3)

Ihre Antwort auf die Frage