首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-29 
关于比较问题~~~迷惑中……intmain(){if( join join ){cout Equal... }else{cout notEqu

关于比较问题~~~迷惑中……
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”实际上都是一个东西(这样就节省了内存空间)。

热点排行