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
f
nichts 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
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.