pub fn eq<T>(a: *const T, b: *const T) -> boolwhere
T: ?Sized,
Expand description
比较裸指针是否相等。
这与使用 ==
运算符相同,但泛型较少:
参数必须是 *const T
裸指针,而不是任何实现 PartialEq
的东西。
这可用于按地址比较 &T
引用 (隐式强制为 *const T
),而不是比较它们指向的值 (PartialEq for &T
实现的作用)。
在比较宽指针时,地址和元数据都被测试是否相等。
但是,请注意比较 trait 对象指针 (*const dyn Trait
) 是不可靠的: 指向相同底层类型的值的指针可以比较不相等 (因为 vtables 在多个 codegen 单元中重复),而指向不同底层类型的值的指针可以比较相等 (因为相同 vtables 可以在 codegen 元中进行重复数据删除)。
Examples
use std::ptr;
let five = 5;
let other_five = 5;
let five_ref = &five;
let same_five_ref = &five;
let other_five_ref = &other_five;
assert!(five_ref == same_five_ref);
assert!(ptr::eq(five_ref, same_five_ref));
assert!(five_ref == other_five_ref);
assert!(!ptr::eq(five_ref, other_five_ref));
Run切片还通过它们的长度 (胖指针) 进行比较:
let a = [1, 2, 3];
assert!(std::ptr::eq(&a[..3], &a[..3]));
assert!(!std::ptr::eq(&a[..2], &a[..3]));
assert!(!std::ptr::eq(&a[0..2], &a[1..3]));
Run