引用字符串字面值,为什么比较结果不符合预期?
- C/C++ code
int compare(const char (&v1)[2], const char (&v2)[2]){ cout << v1 << " " << &v1 << " " << v2 << " " << &v2 << endl; if (v1 < v2) return -1; if (v1 > v2) return 1; return 0;}int main(int argc, char *argv[]){ cout << compare("z", "w") << endl; cout << endl; system("pause"); return 0;}
返回值为-1,初步怀疑比较的是地址!但是v1明明是个值,怎么会这样?
求详细解释!顺便求vs2010里关系操作符.比如"<"的系统定义的代码在哪里,给出具体的查看方式!(我怀疑可能是重载的原因)
[解决办法]
再补一句我一贯以来的观点(当然高手觉得这是扯淡,但我本来就是菜鸟,跟高手想法不同很自然)
新手不要使用cout,使用printf和scanf,因此cout的重载很智能,往往新手自己都不知道自己写的是啥意思它就知道——对于新手学习这么语言来说,这一点的害处比它不知道啥意思还要大得多
[解决办法]
无法跟你解释,因为你缺的基础知识太多.等你认真看完C++ PRIMER 应该能理解.
#19 说得也不对... 可以看看我给的那个链接.
为了解这个问题,你需要掌握但是不限于:
1.类型转换 ,包括数组到指针的转换.
2.操作符重载.了解std::ostream 重载的operator<<;
3.函数重载.
4.引用是什么.
[解决办法]
[解决办法]
为了弥补< 运算符不能比较字符串,string.h 中定义这个专门的strcmp()来处理字符串的比较,
这个可以通过测试验证出来的;
第一种方法:你可以在输出v1,v2的时候用printf("%d,%d",v1,v2);这就证明v1和v2中存放的是地址,也就可以说明 是iostream类中对其做了特殊处理;
第二种方法,你可以用strcmp进行比较,可以得出正确错误,也就可以说明<没有做特殊的处理,
在32位操作系统下 任何指针在内存中,sizeof都是4,存放的是代表地址的数字;
好多东西可以通过验证得出依据来,再有一个