|
发表于 2023-6-9 19:05:26
|
显示全部楼层
对于你的问题,实际上这两个问题都涉及到了C++中的运算符优先级和短路运算。
在第一个问题中, i=1,++i,++i||++i,i 。首先,逗号运算符 , 是最低优先级的运算符,它会按照从左到右的顺序依次执行表达式。在每个逗号分割的表达式中,先执行赋值 = ,然后执行前置自增 ++ ,最后执行逻辑或 || 。但是, || 运算符存在短路特性,也就是当它的左边为真时,右边的表达式就不会被执行。所以在这个例子中,先执行 i=1 ,然后执行 ++i ,因为 ++i 的结果是2(真),所以 ||++i 不会执行,即 i 的值在 ++i||++i 表达式结束后为2,然后再执行最后的 i ,使 i 的值变为3。
对于第二个问题, (i=1,i=10)?i++||++i:++i 。首先,三元运算符 ?: 的优先级仅高于赋值运算符 = 和逗号运算符 , ,所以首先执行 (i=1,i=10) , i 的值变为10,然后判断 i 的值是否为真(非0为真),由于 i 的值为10,所以执行 ?: 运算符后面的 i++||++i ,但是和第一题一样, || 存在短路特性,所以 i++ 的结果为10(真),因此 ++i 不会执行,所以整个表达式的值为10。
对于你的问题,“是因为对与第三题逻辑运算符结果不是布尔类型而条件运算符结果为布尔类型吗”,这个解释并不准确。实际上,这两题的结果都和逻辑运算符的短路特性有关,而不是他们的结果是否为布尔类型。 |
|