C++字符串比较问题,和书上说的不一样

richard_ma 2007-06-02 07:12:43
今天写了这么一个程序
#include <iostream>

using namespace std;

int main() {

if ("join" == "join")
cout << "equal" << endl;
else
cout << "not equal" << endl;

return 0;
}

输出总是equal,我已经试了vs8,vc6,g++三个编译器,结果都一样,不知道是为什么。书上说应该会分配不同的内存空间,比较时比较的是首地址,应该是不同的啊,怎么输出总是相同呢?
更怪的是我写了如下程序
#include <stdio.h>

int main(int argc, char *argv[])
{
printf("%p\n", "join");
printf("%p\n", "join");

return 0;
}

输出的地址也是相同的,更糊涂了
...全文
337 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lightnut 2007-06-02
  • 打赏
  • 举报
回复
编译器行为, C++标准未规定
jixingzhong 2007-06-02
  • 打赏
  • 举报
回复
比如 VC,
好像是 /GF 开关,当开启的时候,
合并重复的字符串, 并将字符串常量放到只读内存, 防止被修改。

这样就导致了 if ("join" == "join") 结果是 true
jixingzhong 2007-06-02
  • 打赏
  • 举报
回复
环境内存优化了 ...
longshanks 2007-06-02
  • 打赏
  • 举报
回复
有的编译器为了优化,将相同的字符串常量放在同一个地址空间中,以减少内存占用。这种技术叫“折叠”
WizardLucien 2007-06-02
  • 打赏
  • 举报
回复
在编译器里把使用常量池和优化关掉。:)

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧