关于std::streambuf::sgetc()与sbumpc()返回值范围的技术问询
关于std::streambuf::sgetc()和sbumpc()返回值范围的问题
好问题!这个其实在C++标准里有明确规定,完全可以放心——当std::streambuf::sgetc()和std::streambuf::sbumpc()返回的不是EOF时,返回值一定落在[0, 255]这个区间里。
具体原因是:
- C++标准强制要求,这两个函数如果成功读取到字符,会将该字符以无符号char类型的值转换为int的形式返回。
- 无符号char的原生取值范围就是
0到255,转换为int后不会改变数值大小,所以必然处于[0, 255]之间。 - 而EOF是一个特殊的实现定义值(通常是
-1),标准明确要求它不等于任何有效char转换为int后的结果,所以只要返回值不是EOF,就一定是合法的0-255范围内的数值。
不管你用的是GCC、Clang还是MSVC等不同编译器,都必须遵守这个标准规定,所以不用有跨平台的兼容性担忧。
内容的提问来源于stack exchange,提问作者Jaeya
相关产品推荐
相关产品推荐

