a*****n 发帖数: 149 | 1 刚写了小代码,发现一点疑惑
template
int compare(T &a1, T &a2)
{
if (a1 < a2)
return 1;
else
return 2;
}
void main()
{
cout << compare("abc", "def") << endl;
if ("abc" < "def")
cout << 1 << endl;
else
cout << 2 << endl;
}
第一个输出是2,第二个输出1。为啥呢?多谢赐教! |
y*******g 发帖数: 6599 | 2 你这样都是比较地址吧
【在 a*****n 的大作中提到】 : 刚写了小代码,发现一点疑惑 : template : int compare(T &a1, T &a2) : { : if (a1 < a2) : return 1; : else : return 2; : } : void main()
|
X****r 发帖数: 3557 | 3 取决于你的编译器及编译选项,两个同样的"abc"未必
就是同一个地址。你试试"abc" == "abc"就知道了。
【在 a*****n 的大作中提到】 : 刚写了小代码,发现一点疑惑 : template : int compare(T &a1, T &a2) : { : if (a1 < a2) : return 1; : else : return 2; : } : void main()
|
L*******s 发帖数: 63 | 4 在我机器上结果是一样的
【在 a*****n 的大作中提到】 : 刚写了小代码,发现一点疑惑 : template : int compare(T &a1, T &a2) : { : if (a1 < a2) : return 1; : else : return 2; : } : void main()
|
L*******s 发帖数: 63 | 5 是引用不是地址啊
【在 y*******g 的大作中提到】 : 你这样都是比较地址吧
|
X****r 发帖数: 3557 | 6 char *&用起来和char *一样
【在 L*******s 的大作中提到】 : 是引用不是地址啊
|
g*******y 发帖数: 1930 | 7 两个地方都是在比较地址吧。string literals 能直接用 < 比较吗?
string literals的地址谁在前面,当然就是跟编译器有关系了。
顺便问一下,string literal是在code 还是data segment里?
【在 a*****n 的大作中提到】 : 刚写了小代码,发现一点疑惑 : template : int compare(T &a1, T &a2) : { : if (a1 < a2) : return 1; : else : return 2; : } : void main()
|
t****u 发帖数: 8614 | 8 Theoretically, you can implement the operator overloading,
bool operator < (const std::string & s1, const std::string & s2)
{
return strcmp(s1.c_str(), s2.c_str())<0;
} |
k****5 发帖数: 546 | 9 我的机器, 第一个输出是2,第二个输出2。
【在 a*****n 的大作中提到】 : 刚写了小代码,发现一点疑惑 : template : int compare(T &a1, T &a2) : { : if (a1 < a2) : return 1; : else : return 2; : } : void main()
|
g*******y 发帖数: 1930 | 10 突然发现,我表达好差啊。我前面说的那句“string literals 能直接用 < 比较吗?
”本意是个反问句,意思是你想实现字符串比较,直接裸用<操作符作用在两个const
char*,是不行的。
结果被人当成疑问句了。。。
另外说一点就是,像这个帖子里面的情况,比较两个string literal,重载操作符是做
不到的。
可行的办法只能是定义一个 bool strcmp()之类的函数。
为什么?因为操作符重载,前提条件是至少一个operand必须是class type。
Theoretically, you can implement the operator overloading,
bool operator < (const std::string & s1, const std::string & s2)
{
return strcmp(s1.c_str(), s2.c_str())<0;
}
【在 t****u 的大作中提到】 : Theoretically, you can implement the operator overloading, : bool operator < (const std::string & s1, const std::string & s2) : { : return strcmp(s1.c_str(), s2.c_str())<0; : }
|
y*******g 发帖数: 6599 | 11 strcmp是int 不是bool
【在 g*******y 的大作中提到】 : 突然发现,我表达好差啊。我前面说的那句“string literals 能直接用 < 比较吗? : ”本意是个反问句,意思是你想实现字符串比较,直接裸用<操作符作用在两个const : char*,是不行的。 : 结果被人当成疑问句了。。。 : 另外说一点就是,像这个帖子里面的情况,比较两个string literal,重载操作符是做 : 不到的。 : 可行的办法只能是定义一个 bool strcmp()之类的函数。 : 为什么?因为操作符重载,前提条件是至少一个operand必须是class type。 : : Theoretically, you can implement the operator overloading,
|