const reference indirekt verändern: Standardkonform?



  • Ist folgender Code standardkonform?:

    #include <iostream>
    
    template <class Function>
    void f(const int& k, Function func) {
    	std::cout << k << std::endl;
    	func();
    	std::cout << k << std::endl;
    }
    
    int main() {
    	int x = 7;
    	auto lambda = [&x](){x++;};
    	f(x, lambda);
    }
    

    k ist eigentlich const, wird aber trotzdem indirekt durch func verändert. Das verwirrt mich ein bisschen.



  • x wird durch lambda verändert. Aber x ist ja auch nicht const 😕


  • Mod

    Nein. Du gibst in f nichts zurück.



  • f sollte nichts zurückgeben. Ich habs angepasst.

    Aber dass k sich innerhalb der Funktion ändert, ist anscheinend ok, oder?


  • Mod

    Ramanujan schrieb:

    Aber dass k sich innerhalb der Funktion ändert, ist anscheinend ok, oder?

    Das Objekt auf das sich k bezieht wurde geändert.

    Eine const -Referenz sagt lediglich aus dass über sie selbst die Entität auf die sie verweist nicht geändert werden kann. Wir können sie also nur beobachten. Wir können auch Veränderungen beobachten.


Log in to reply