Je peux voir deux 'some'
littéraux dans le code assembleur généré par MSVC, mais un seul avec clang et gcc. Cela conduit à des résultats totalement différents de l'exécution du code.
static const char *A = "some";
static const char *B = "some";
void f() {
if (A == B) {
throw "Hello, string merging!";
}
}
Quelqu'un peut-il expliquer la différence et les similitudes entre ces sorties de compilation? Pourquoi clang / gcc optimise-t-il quelque chose même si aucune optimisation n'est demandée? Est-ce une sorte de comportement indéfini?
Je remarque également que si je change les déclarations pour celles présentées ci-dessous, clang / gcc / msvc n'en laisse aucune "some"
dans le code assembleur. Pourquoi le comportement est-il différent?
static const char A[] = "some";
static const char B[] = "some";