我可以'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";