C++中bool变量cin输入非预期值的转换差异疑问
关于C++中cin读取bool变量的输入差异问题
输入整数3时的逻辑:
cin读取bool类型变量时,默认会将输入视为整数解析。只要输入是有效的整数(哪怕不是预期的0或1),非零整数都会按照C++的规则隐式转换为布尔值true(输出1),且这次输入操作是成功的,变量x被正确赋值为true。输入文本"hallo"时的逻辑:
当输入是无法解析为整数的字符串时,cin尝试读取bool值的操作会直接失败。此时cin会将目标bool变量x设置为false(输出0),同时标记输入流进入错误状态(failbit置位)。这不是因为"hallo"被转换为false,而是输入失败后的标准行为——提取操作失败时,bool类型变量会被置为false。
额外补充:如果需要让cin识别true/false这类字符串作为bool输入,可以先执行cin >> boolalpha;开启对应解析模式,默认情况下该模式是关闭的,仅支持整数0/1作为有效bool输入。
内容的提问来源于stack exchange,提问作者Ahmed mohamed
相关产品推荐
相关产品推荐

