也就是说两个字符串常量是保存在不同的地址中,尽管这两个字符串相同!
而实际比较的是他们的地址吗?
请看:钱能的c++程序设计教程
//ch8_16.cpp
#include <iostream.h>
void main()
{
if("join"=="join")
cout << "equal \n" ;
else
cout << "not equal \n"
}
我在Tru64和LInux2004中编译的结果均和在windows下VC6.0编译的结果一样:
equal
而钱能说是在c++ builder中结果为:not equal
我就是想知道这两个字符串比较实质是比较他们的地址吗?安照钱能的讲法是比较地址啊,而实际的编译却不是这样!
各位大侠能帮我解释不?谢谢!
7 个解决方案
#1
理论上是这样的
但有些编译器经过了优化
但有些编译器经过了优化
#2
那就是跟使用strcmp()差不多了?
#3
优化以后可能在一个地址!
#4
如果谁有c++builder,可以try啊,看看结果如何?谢谢!
#5
在BC3.0输出 no equal
所以是说,有些编译器经过了优化
所以是说,有些编译器经过了优化
#6
的确不一样,是因为在Tru64和LInux2004中编译的结果均和在windows下VC6.0编译中,编译器做了优化,将同样的常量字符串合并成一个常量字符串,所以他们的地址是一样的。而在在c++ builder中,默认是不作优化,所以比较就不相等了. 这一点,各个编译器都是可以通过编译选项来设置的。个人认为c++ builder不做优化是为了更加符合C++的原始想法。
#7
不错!有理,谢谢各位的答复!结贴了!
#1
理论上是这样的
但有些编译器经过了优化
但有些编译器经过了优化
#2
那就是跟使用strcmp()差不多了?
#3
优化以后可能在一个地址!
#4
如果谁有c++builder,可以try啊,看看结果如何?谢谢!
#5
在BC3.0输出 no equal
所以是说,有些编译器经过了优化
所以是说,有些编译器经过了优化
#6
的确不一样,是因为在Tru64和LInux2004中编译的结果均和在windows下VC6.0编译中,编译器做了优化,将同样的常量字符串合并成一个常量字符串,所以他们的地址是一样的。而在在c++ builder中,默认是不作优化,所以比较就不相等了. 这一点,各个编译器都是可以通过编译选项来设置的。个人认为c++ builder不做优化是为了更加符合C++的原始想法。
#7
不错!有理,谢谢各位的答复!结贴了!