为什么(仅)某些编译器对相同的字符串文字使用相同的地址?
https://godbolt.org/z/cyBiWY 我可以'some'在MSVC生成的汇编代码中看到两个文字,但是只有一个带有clang和gcc。这导致代码执行的结果完全不同。 static const char *A = "some"; static const char *B = "some"; void f() { if (A == B) { throw "Hello, string merging!"; } } 谁能解释这些编译输出之间的区别和相似之处?为什么即使不要求优化,clang / gcc也会优化某些内容?这是某种不确定的行为吗? 我还注意到,如果将声明更改为以下所示,则clang / gcc / msvc根本不会"some"在汇编代码中保留任何声明。为什么行为不同? static const char A[] = "some"; static const char B[] = "some";