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

-
Nein. Du gibst in
fnichts zurück.
-
f sollte nichts zurückgeben. Ich habs angepasst.
Aber dass k sich innerhalb der Funktion ändert, ist anscheinend ok, oder?
-
Ramanujan schrieb:
Aber dass k sich innerhalb der Funktion ändert, ist anscheinend ok, oder?
Das Objekt auf das sich
kbezieht 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.