C++中无输入/空行/EOF时读取unsigned long long是否存在未定义行为?
回答
当输入为文件末尾(EOF)或空行时,这段代码确实会触发未定义行为(UB)。
原因如下:
- 变量
i是未初始化的局部变量,声明时内存中保留的是随机残留值。 - 当
cin >> i读取失败时(比如遇到EOF,或者空行中没有可解析为unsigned long long的有效输入),输入流的提取操作不会修改i的值。 - 根据C++标准,读取未初始化的局部变量属于未定义行为——编译器可以自由处理这种情况,你在Compiler Explorer中看到的“保留内存原有随机值”只是UB的一种可能表现,实际运行时完全可能出现其他不可预料的结果。
内容的提问来源于stack exchange,提问作者ByteEater
相关产品推荐
相关产品推荐

