为什么while(cout << A [-N] <<''&& N)和while(cout << A [-N] <<''')给我两个不同的答案,N在这里做什么?

时间:2019-05-08 02:10:57

标签: c++

代码如下所示

int main() {

 int N, i = 0;

cin >> N;

int *A = new int[N];

while (cin >> A[i++])
    ;

while (cout << A[--N] << ' ' && N)
    ;

delete[] A;

return 0;
}

当我删除&& N时,我的输出中有很多零,我真的不知道为什么

1 个答案:

答案 0 :(得分:0)

声明

std::cout << A[--N] << ' '

如果没有错误,则返回true。循环

while (std::cout << A[--N] << ' ');

输出值,直到发生错误。只要A[--N]不尝试读取无法访问的内存,

 std::cout << A[--N] << ' '

的值为true

程序

#include <iostream>

int main() {
    int a[5];
    std::cout << a[-10];
    return 0;
}

具有未定义的行为,但是可以编译和执行。在许多情况下,它将输出一些废话,但返回值

std::cout << a[-10];

将为true

您的问题中的&& NN到达0时停止循环。