读书人

关于比较有关问题~迷惑中…

发布时间: 2012-03-29 12:53:12 作者: rapoo

关于比较问题~~~迷惑中……
int main()
{
if( "join "== "join ")
{
cout < < "Equal... ";
}
else
{
cout < < "not Equal... ";
}
return 0;
}
钱能《C++程序设计》第168页说字符串比较实质是地址比较,虽然两个字符串字符相同可是存放的地址不同,所以结果是not Equal。
可是我在VS2005上运行时确实Equal。
Why???
望知道此问题人,回答下小弟问题。

[解决办法]
if( "join "== "join ") 这样的比较是比较的 字符串的地址。

得到的结果是 equal,
是因为环境优化了
[解决办法]
由于 "join " 这样的表示方式表达的是 const 字符串,
所以,对于 两个 "join ",
可以只在内存中保存一份,(因为不会被修改,那么一份就足够了)
导致的结果就是 equal 了 ~

楼主你可以关闭优化选项,
这样就可以得到 not equal 的结果了。
[解决办法]
( "join "== "join ")
这个的确是在“比较地址”,而非“比较内容”。
但是,楼主要注意,字符串字面常量是个特殊的东西,它会被编译器“特殊照顾”,比如他们存放的地点以及存放的形式,所以上述比较结果可以为equal,原因就是编译器作了优化,让所有的“join”实际上都是一个东西(这样就节省了内存空间)。

读书人网 >C++

热点推荐