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
akönne sich nicht ändern, und eine simple Optimierung namens constant propagation durchführt. Deinmemsetwird 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.