'some'
MSVCによって生成されたアセンブラコードで2つのリテラルを確認できますが、clangとgccを使用するリテラルは1つだけです。これにより、コード実行の結果がまったく異なります。
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";