rounded = numpy.array((numpy.array(myarray, dtype='datetime64[m]'), dtype='datetime64[ms]')
在上面的代码中,它没有给出错误,它成功运行并给出“ hello”作为输出。
但是我们必须在这种方程式中使用int n = 5;
if(2<=n<=20)
{
cout << "hello";
}
。
谁能解释一下?
答案 0 :(得分:12)
<=
在C ++中是左关联的,因此表达式被解析为((2 <= n) <= 20)
。 2 <= n
类型为bool
,可以隐式转换为int
:true
转换为1
,而false
转换为0
这两个都是<= 20
,因此条件实际上总是成立。
请注意,以上假设n
是int
或其他原始数字类型。如果n
是用户定义的类,其中operator <=
已重载,则关联性位仍然为true,但基于该重载运算符的返回类型和语义,有关隐式转换的部分可能适用也可能不适用
答案 1 :(得分:2)
2<=n<=20
将作为(2<=n)<=20
执行。
2<=n
产生0
或1
,具体取决于n
的值。
0<=20
和1<=20
是正确的,因此将执行cout
,而与n
的值和类型无关。
n
可能是带有重载运算符的类的对象,其中2<=n
会产生某种结果(对象是类或值>21
),与<=20
相比结果到false
。在这种情况下,将不会有输出。
答案 2 :(得分:1)
您可能是说
if (2 <= n && n <= 20)
C ++和C组2 <= n <= 20
为(2 <= n) <= 20
;子表达式为0(在C ++中为false
)或1(true
),均小于或等于20,因此整个表达式为1(true
)。对于任何基本非指针类型n
,包括浮点NaN,都是如此。
答案 3 :(得分:0)
首先比较第一个比较2 <= n
。这将返回true
,可转换为int
。来自conv.integral#2:
如果源类型为
bool
,则值false
转换为零,而值true
转换为1。
一旦true
转换为1
或0
,下一个比较就是1 <= 20
或0 <= 20
,这始终是正确的。因此是输出。