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.


  • Mod

    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. Dein memset wird womöglich ebenfalls wegoptimiert, da wirkungslos.


  • Mod

    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.


Anmelden zum Antworten