最近我的朋友给我看了一篇文章,显示在C ++中+!“” = = 1。 这属于什么主题?我在哪里可以查看?为什么会这样呢?我在任何地方都找不到有关此信息
答案 0 :(得分:3)
这属于什么主题?
隐式转换。还有 operators 。还有字符串文字。所有这些都是表达式的子主题。
我在哪里可以查看?
c ++标准是权威规范。也有描述规则的非官方网站。
为什么这是真的?
""
是(n个空)字符串文字。字符串文字是(字符的)数组。数组衰减到指向第一个元素的指针。当操作数是非null指针时,逻辑NOT运算符(!
)的计算结果为false。当操作数为false时,NOT运算符的值为true。一元加算术运算符将操作数隐式转换为整数。 True转换为1。
答案 1 :(得分:1)
””
是const char
的数组。在大多数情况下,数组会衰减为指向其第一个元素的指针。这就是这里发生的情况。将!
应用于指针时,如果指针为空指针,则结果为true
,否则为false
。该指针不是空指针,因此!””
的值为false
。 !false
是true
,所以!!””
是true
。一元+
会将较小的类型提升为int
;在这种情况下,它将值true
从bool
提升到int
。将true
提升为int
时,它变为1。