C++ 字符串比较是否相等?

简单地说,编译器有可能会把两个相同的字符串字面量优化为存到同一个地方(但不一定会这样做)。要比较字符串的话还是老老实实用 strcmp 好。另外把字符串字面量直接赋值给 char* 在 C++11 已经被禁止了,硬要赋值的话得加上 const_cast\u0026lt;char*\u0026gt;。
■网友
这里当然只是比较了指针是否指向了同一个地址,其他的参照高票答案所说即可...
■网友
把字符串常量赋值给char*而不是const char*。
【C++ 字符串比较是否相等?】 比较指针的操作,脑子里当作比较内容的语义。
依赖编译器优化来实现逻辑,玩UB。
重点是,不以为耻,反以为荣。
感觉你跟这种人同事(看起来还是老同事?),估计技术环境肯定糟透了,赶紧跳槽吧。
■网友
你的同事属于碰巧对的,千万不要学。你可以cout一下\u0026amp;(pStr1)和\u0026amp;(pStr2)就知道为什么了。不过C++ 为什么要用 char*,string类不好吗?string的比较就可以直接拿==了来做了。
■网友
编译器触发了常量优化。 由此可见你的同事c++水平非常糟糕。 以后请不要听信他的话
■网友
char* 是指针类型,== 这样比的是两个地址是否相等(也就是两个指针是否指向相同的地址)。比如说,
const char* p1 = "abc";
const char* p2 = "abc";
if (p1 == p2) 里面为 true。两个相同内容的常量字面值型的字符串,编译后指向的是位于只读的初始化数据段中的同一个地址。
char str = "abc"; //这里在栈上声明的 str,属于另一个存储位置。
if(p1 == str) 里面为 false。
c++ 里的 std::string 是一个类,定义了 operator == ,所以两个对象用 == 进行比较,比较的是字符串的值。
■网友
没懂下面的答案啊。这是C++ 啊,不是C。
被重载了,是一个东西
看了一下问题描述,是c。。。
■网友
看书上说:“由于C-串类型是字符指针,因此,比较两个相同C-串的时候,会因空间位置的不同而不同”,然后分别用vs2012和DEVC++试了一下,好像确实可以直接比较啊,并且两个指针指的地址不一样,但是的确是可以进行判断。
■网友
@SuperSodaSea说得很对,我特意开个答案提醒你一下,你以后别问你那个同事了,有问题自己研究吧!
■网友
2005~2017,好奇这十几年来竟然没有被炒了鱿鱼。
推荐阅读
- 在上海陆家嘴附近工作,请问去哪边租房会比较好
- 设计专业学生上传自己的作品,用哪个网站比较好
- 学的自动化却对IT比较感兴趣。。感觉对自己的专业帮助不大,好苦恼,要不要继续是专精还是学点感兴趣的?
- 大三学生准备日本留学过程中要不要准备考研
- 电话营销机器人哪个比较好用
- 非计算机专业想要利用课余时间深入自学C++,想要找到比较体面的工作大概需要啥水平
- |PHEV车款没比较环保,新能源是否存在谎言呢?
- 最近有啥样的交友软件比较好玩呢
- 请问有哪些机器人大赛是比较权威的
- 应届生选一个比较大的互联网公司还是一个小但赚钱的游戏公司好
