memset mit const integer
-
Hallo,
ich frage mich warum dies hier nicht so funktioniert wie in C:
#include <iostream> #include <cstring> int main() { const int a = 42; std::cout << "a: " << a << std::endl; std::memset((void*)&a, 'A', sizeof(int)); std::cout << "a: " << a << std::endl; }
Gibt zweimal 42 aus.
-
Weil das Verhalten deines Programs undefiniert ist. Das manifestiert sich in der Praxis so, dass der Compiler (zu Recht) annimmt, der Wert von
a
könne sich nicht ändern, und eine simple Optimierung namens constant propagation durchführt. Deinmemset
wird womöglich ebenfalls wegoptimiert, da wirkungslos.
-
rifkin schrieb:
ich frage mich warum dies hier nicht so funktioniert wie in C:
Genau genommen funktioniert es genau so wie in C: nämlich nicht; es ist auch dort undefiniertes Verhalten.