C++指针比较
C++ Pointer Comparison
在C++中如何比较指针?
以下代码中的最后一行显示b
和c
的值不同。但是,b==c
返回true。
#include <iostream>
struct A { int a; };
struct B { int b; };
struct C : A, B { };
int main() {
auto c = new C();
B* b = static_cast<B*>(c);
A* a = static_cast<A*>(c);
a->a = 1;
b->b = 2;
std::cout << c->a << c->b <<"n";
std::cout << (a==c) << (b==c) << "n";
std::cout << (long)a << "n" << (long)b << "n" << (long)c <<"n";
}
我使用GCC和Clang:收到的样本输出
12
11
34073632
34073636
34073632
不要将指针强制转换为long,而是将它们强制转换为intptr_t。
std::cout << (intptr_t)a << "n" << (intptr_t)b << "n" << (intptr_t)c <<"n";
无论如何,请参阅以下定义:
struct C : A, B { };
在内存中,看起来像:
{
A; [sizeof int]
B; [sizeof int]
}
由于A和B都是C的基类,当你这样做时:
A* a = static_cast<A*>(c);
你会得到一个指向C的前4个字节的指针。当你这样做时:
B* b = static_cast<B*>(c);
您得到了一个指向C的最后4个字节的指针,因此产生了差异。指向C类型的指针将始终以这种方式隐式强制转换指针。
相关文章:
- 智能指针作为无序映射键,并通过引用进行比较
- std::less是否应该允许在编译时比较不相关的指针?
- 禁止指针和整数之间的比较C++
- ISO C++禁止指针和整数 [-fpermissive] [c++] 之间的比较
- 谷歌测试比较指针数组的内容
- 使用模板专用化来比较指针引用
- 重载 >= 运算符来比较指针
- 以C++(Arduino)为单位比较指针到字节
- 使用关系运算符比较指针意味着什么
- C++不会让我比较指针和整数
- 比较指针对象相等性
- 用于比较指针到 NULL 的编码标准
- 无法比较指针和整数c++
- 如何比较指针
- 在stl_algorithm .h中比较指针时出错
- ISO C++禁止在C++代码中比较指针和整数[-fpermissive]
- 比较指针和整数时出现编译器错误
- 标准::地图比较指针
- 比较指针.多重继承问题
- ISO c++禁止在devc++中比较指针和整数[-fpermissive]错误