gpt4 book ai didi

c++ - 运算符 < 和 > 如何与指针一起使用?

转载 作者:可可西里 更新时间:2023-11-01 14:56:07 25 4
gpt4 key购买 nike

只是为了好玩,我有一个 std::listconst char* ,每个元素都指向一个以 null 结尾的文本字符串,并运行 std::list::sort()在上面。碰巧的是,它有点(没有双关语意)没有对字符串进行排序。考虑到它正在处理指针,这是有道理的。

根据documentationstd::list::sort() , 它(默认情况下)使用 operator <在要比较的元素之间。

暂时忘记列表,我的实际问题是:这些 (>、<、>=、<=) 运算符在 C++ 和 C 中如何处理指针?他们只是比较实际的内存地址吗?

char* p1 = (char*) 0xDAB0BC47;
char* p2 = (char*) 0xBABEC475;

例如在 32 位小端系统上,p1 > p2因为0xDAB0BC47 > 0xBABEC475

测试似乎证实了这一点,但我认为最好将其放在 StackOverflow 上以供将来引用。 C 和 C++ 都做一些 weird things到指针,所以你永远不会真正知道......

最佳答案

在 C++ 中,您不能使用关系运算符来比较任何指针。您只能比较指向同一数组中元素的两个指针或指向同一对象成员的两个指针。 (当然,您也可以将指针与自身进行比较。)

但是,您可以使用 std::less 和其他关系比较函数对象来比较任意两个指针。结果是实现定义的,但保证总排序。

如果您有一个平面地址空间,指针比较很可能只是比较地址,就好像它们是整数一样。

(我相信 C 中的规则是相同的,没有比较函数对象,但必须有人确认这一点;我对 C 的熟悉程度不如对 C++ 的熟悉。)

关于c++ - 运算符 < 和 > 如何与指针一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4607418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com