在PHP中是否有像C中那样的相同运算符===?

PHP中Identical Operatpr=== )如果两边完全相等则返回TRUE ,并且它们的类型相同。

C世界有类似的东西吗?

有了C11 _Generic ,你的问题让我想要发明一个。

基本上你可以使用宏来实现这个:

 #define is_truly_equal(a, b) \ _Generic((a), \ int: _Generic((b), int: (a) == (b), default: 0), \ short: _Generic((b), short: (a) == (b), default: 0), \ default 0:) 

哪个可以变成一个易于维护,难以阅读的X宏列表:

 #define TYPE_LIST(a,b) \ X(a,b,int) \ X(a,b,unsigned int) \ X(a,b,short) \ X(a,b,unsigned short) \ X(a,b,char) \ X(a,b,signed char) \ X(a,b,unsigned char) \ X(a,b,float) \ X(a,b,double) #define X(a,b,type) type: _Generic((b), type: (a) == (b), default: 0), #define is_truly_equal(a, b) _Generic((a), TYPE_LIST(a,b) default: 0) 

工作范例:

 #include  #define TYPE_LIST(a,b) \ X(a,b,int) \ X(a,b,unsigned int) \ X(a,b,short) \ X(a,b,unsigned short) \ X(a,b,char) \ X(a,b,signed char) \ X(a,b,unsigned char) \ X(a,b,float) \ X(a,b,double) #define X(a,b,type) type: _Generic((b), type: (a) == (b), default: 0), #define is_truly_equal(a, b) _Generic((a), TYPE_LIST(a,b) default: 0) inline void print_equal (_Bool is_equal) { is_equal ? printf("equal: ") : printf("not equal: "); } #define print_expr(p1, p2) print_equal( is_truly_equal(p1, p2) ); printf(#p1 ", " #p2 "\n") int main (void) { print_expr(1,1); print_expr(1,2); print_expr(1,1u); print_expr(1, (short)1); print_expr((signed char)'A', (char)'A'); print_expr((unsigned char)'A', (char)'A'); print_expr('A', 65); print_expr('A', (char)'A'); print_expr('A', +(char)'A'); } 

产量

 equal: 1, 1 not equal: 1, 2 not equal: 1, 1u not equal: 1, (short)1 not equal: (signed char)'A', (char)'A' not equal: (unsigned char)'A', (char)'A' equal: 'A', 65 not equal: 'A', (char)'A' equal: 'A', +(char)'A' 

尝试(并且畏缩)C语言类型系统的绝佳方式:)

我不明白为什么你需要在C或java中使用这样的函数,只是比较相同类型的变量是程序员的工作,因为你必须明确地声明它们。