Pointers D(DLang)中具有简单类型的二进制'is'运算符的使用和实现

Pointers D(DLang)中具有简单类型的二进制'is'运算符的使用和实现,pointers,d,comparison-operators,Pointers,D,Comparison Operators,在D中,在这种情况下,二进制is运算符之间有什么区别吗 void*p; 如果(p为null){}/#1 使用指针,而不是简单地 if(!p){}/#2a 或 if(p==null){}/#2b 没有接线员?(德朗) (我将此限制为简单的标量类型,没有聚合或复杂类型。我知道类is只是比较它们的地址,iirc。)与类型void*,与其他普通指针一样,没有区别。与int也没有区别,但与其他类型有区别,包括float、数组(包括字符串)、结构和类 我建议你总是用任何类型写下你的意思,所以如果你以后

在D中,在这种情况下,二进制
is
运算符之间有什么区别吗

void*p;
如果(p为null){}/#1
使用指针,而不是简单地

if(!p){}/#2a

if(p==null){}/#2b
没有接线员?(德朗)


(我将此限制为简单的标量类型,没有聚合或复杂类型。我知道类
is
只是比较它们的地址,iirc。)

与类型
void*
,与其他普通指针一样,没有区别。与
int
也没有区别,但与其他类型有区别,包括
float
、数组(包括字符串)、结构和类


我建议你总是用任何类型写下你的意思,所以如果你以后改变类型就可以了。使用
is
查看两个引用是否相同。使用
==
查看内容是否相同。避免
!p
,除非已知
p
是一种普通的
bool
类型,因为它具有最令人惊讶的行为(它确实执行
cast(bool)
,可以在结构和类上调用重载的
opCast!bool
,在数组上执行
。ptr!为null
,这打开了null与零长度数组的乐趣)。最好只说出你的意思,并保持代码的可读性和抗重构能力。

对于类型
void*
,与其他普通指针一样,没有区别。与
int
也没有区别,但与其他类型有区别,包括
float
、数组(包括字符串)、结构和类

我建议你总是用任何类型写下你的意思,所以如果你以后改变类型就可以了。使用
is
查看两个引用是否相同。使用
==
查看内容是否相同。避免
!p
,除非已知
p
是一种普通的
bool
类型,因为它具有最令人惊讶的行为(它确实执行
cast(bool)
,可以在结构和类上调用重载的
opCast!bool
,在数组上执行
。ptr!为null
,这打开了null与零长度数组的乐趣)。最好只是说出你的意思,并保持代码的可读性和抗重构能力