【发布时间】:2011-06-04 04:37:20
【问题描述】:
只是为了好玩,我有一个const char* 的std::list,每个元素都指向一个以null 结尾的文本字符串,并在其上运行std::list::sort()。碰巧的是,它有点(不是双关语)没有对字符串进行排序。考虑到它正在处理指针,这是有道理的。
根据std::list::sort()的documentation,它(默认情况下)使用元素之间的operator <进行比较。
暂时忘记列表,我的实际问题是:这些 (>、=、
char* p1 = (char*) 0xDAB0BC47;
char* p2 = (char*) 0xBABEC475;
例如在 32 位小端系统上,p1 > p2 因为0xDAB0BC47 > 0xBABEC475?
测试似乎证实了这一点,但我认为最好将其放在 StackOverflow 上以供将来参考。 C 和 C++ 都对指针做了一些weird things,所以你永远不会真正知道...
【问题讨论】:
-
是的,它们只是比较内存地址。
-
Endiadness 在这里不相关。 p1 > p2 是大端还是低端。
-
是的,我注意到了,但是用十六进制字符编写 DABOBCAT 和 BABECATS 很有趣,所以我忽略了这个例子的不那么伟大......
-
有趣的是,
<algorithm>和std::list::sort中的所有排序算法都默认使用operator<(我只需要查一下;我本以为他们会使用std::less默认)。
标签: c++ c pointers comparison operators