arum sind zusammengesetzte Literale in C modifizierba

One assoziiert normalerweise "nicht änderbar" mit dem Begriff "wörtlich"

char* str = "Hello World!";
*str = 'B';  // Bus Error!

Bei der Verwendung von zusammengesetzten Literalen stellte ich jedoch schnell fest, dass sie vollständig modifizierbar sind (und beim Sperren des generierten Maschinencodes werden sie auf den Stapel verschoben):

char* str = (char[]){"Hello World"};
*str = 'B';  // A-Okay!

Ich kompiliere mitclang-703.0.29. Sollten diese beiden Beispiele nicht genau denselben Maschinencode generieren? Ist ein zusammengesetztes Literal wirklich ein Literal, wenn es änderbar ist?

EDIT: Ein noch kürzeres Beispiel wäre:

"Hello World"[0] = 'B';  // Bus Error!
(char[]){"Hello World"}[0] = 'B';  // Okay!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage