为什么 std::operator>>(istream&, char&) 提取空格?
Why does std::operator>>(istream&, char&) extract whitespace?
我正在编译以下程序,我了解到char&
的提取器继续提取字符,即使它是空格字符。我禁用了跳过前导空格字符,期望继续进行读取尝试失败(因为格式化提取在空格处停止),但当它成功时感到惊讶。
#include <iostream>
#include <sstream>
int main()
{
std::istringstream iss("a b c");
char a, b, c;
iss >> std::noskipws;
if (iss >> a >> b >> c)
{
std::cout << "a = "" << a
<< ""nb = "" << b
<< ""nc = "" << c << 'n';
}
}
输出:
a = "a" b = " " c = "b"
从输出中可以看出,b
被赋予了"a"
和"b"
之间的空间值;c
被赋予了以下字符"b"
。我预计b
和c
根本没有值,因为由于前导空格,提取应该失败。这种行为的原因是什么?
在IOStreams中,字符几乎没有格式要求。字符序列中的任何和所有字符都是提取的有效候选项。对于使用数字分面的提取程序,提取定义为在空格处停止。但是,charT&
提取器直接在缓冲区上工作,不分青红皂白地返回下一个可用字符,大概是通过调用 rdbuf()->sbumpc()
.
不要假定此行为扩展到指向字符的指针的提取器,因为它们的提取显式定义为在空格处停止。
相关文章:
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 如何从 std::atomic 中提取指针 T<T>?
- 为什么istream不支持右值提取
- 如何设置一个范围来提取我想要获得的信息
- EASTL矢量<向量<int>>连续的
- 视觉工作室项目.提取源文件夹名称
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- 从字符串中提取整数并形成一个数组
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 从 std::vector<无符号字符>切片中提取 int?
- 在C++中使用重载提取运算符时出现问题
- 在 Qt(C++) 中使用 QProcess 解压缩 - 提取目录问题
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- 无法从 std::string 中提取C++ Unicode 符号
- 如何从也包含C++字母的文本文件中提取某些数字?
- 如何从适合一定范围的数字中提取数字?
- C++从通用引用中提取实际类型
- 从运行服务的应用程序代码中提取窗口句柄
- 如何在字符串中找到字符,然后在C++中提取其余的字符串