C++ 什么是&&&;C语言操作
使用C++ 什么是&&&;C语言操作,c++,c,operators,compiler-optimization,gcc-warning,C++,C,Operators,Compiler Optimization,Gcc Warning,使用-Wall或-Waddress选项,gcc发出警告: 0 1 1 在上述计划中,c是如何评估的?它是c=i&&i,第二部分是多余的,因为&i永远不会计算为false 对于用户定义的类型,实际上可以重载一元运算符&,这可能有所不同,但这仍然是一个非常糟糕的想法 如果打开警告,您将得到如下结果: 警告:“i”的地址将始终计算为“true” C中没有&&&运算符或标记。但是&&(逻辑“and”)和&(一元地址或按位“and”)运算符确实存在 根据规则,这: warning: the addres
-Wall
或-Waddress
选项,gcc
发出警告:
0
1
1
在上述计划中,c
是如何评估的?它是c=i&&i代码>,第二部分是多余的,因为&i
永远不会计算为false
对于用户定义的类型,实际上可以重载一元运算符&
,这可能有所不同,但这仍然是一个非常糟糕的想法
如果打开警告,您将得到如下结果:
警告:“i”的地址将始终计算为“true”
C中没有&&&
运算符或标记。但是&&
(逻辑“and”)和&
(一元地址或按位“and”)运算符确实存在
根据规则,这:
warning: the address of ‘i’ will always evaluate as ‘true’ [-Waddress]
相当于:
c = i &&& i;
如果i
和&i
都为真,则将c
设置为1;如果其中任何一个为假,则将其设置为0
对于int,任何非零值都为真。对于指针,任何非null值都为true(并且对象的地址始终为非null)。因此:
如果i
非零,则将c
设置为1;如果i
等于零,则将0
设置为0
这意味着这里使用&&&
只是为了故意混淆。任务也可以是以下任何一项:
c = i && & i;
c=i&&1;
c=!!我
c=(bool)i;//C++或C语言
c=i?1 : 0; /* C*/
c=i?真:假;//C++
我相信是I&&I)
?有趣的是,我在网上找不到重复的帖子。while(我&&&&I可能是重复的,但不是重复的,但这是一个类似的问题,这是一个好问题link@Manav为什么不:c=i&(&&i);
;其中i
是某个标签?@anishsanei
被定义为int
,问题中没有标签。此外,maximum munch…@anishsane:获取标签地址的&
运算符无论如何都是非标准的gcc扩展。但即使它是标准的,maximum munch规则也会阻止它以这种方式解析om(除非插入空格)。实际上,&i
可以计算为false
。它有时用于默认值。例如:void fn(type&x=*reinterpret\u cast(NULL))如果调用fn
而没有参数,那么&x
在fn
中的值是多少?它是0 a.k.a.false。但是,按照所描述的方式使用它,除非i==0
,否则它始终是真的,如果像我所描述的那样使用它,那么它将是c=&i&&i
@Adrian您不能取消引用空指针,which是*
在重新解释强制转换(NULL)
之前所做的。
c = i && & i;
c = i && 1;
c = !!i;
c = (bool)i; // C++ or C with <stdbool.h>
c = i ? 1 : 0; /* C */
c = i ? true : false; // C++