两个字符串文字具有相同的指针值?

Vip*_*ani 8 c++ string pointers

当我使用MinGW运行此程序时,我输出为"="

#include<iostream>

using namespace std;

int main()
{
 char *str1 = "Hello";
 char *str2 = "Hello";

 if(str1==str2)
 cout<<"=";
 else
 cout<<"!=";


 return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,从逻辑上讲,它应该是!=,因为这些是指针,它们指向不同的内存位置.当我在Turbo C++中运行此代码时,我得到了!=

Rei*_*ica 14

你是对的,他们是指针.但是,它们是否指向不同的位置取决于实施.编译器只存储一次字符串文字并在代码中使用它的地址时使用它的地址是完全有效的.


tim*_*qiu 10

无法保证两个指针指向不同的内存位置.也许是因为优化,或者编译器使用自己的规则......行为是"实现定义".

根据标准(C++11§2.14.5字符串文字):

是否所有字符串文字都是不同的(即存储在非重叠对象中)是实现定义的.