gpt4 book ai didi

c++ - 为什么 std::operator>>(istream&, char&) 提取空格?

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:37 26 4
gpt4 key购买 nike

我正在编译以下程序,我了解到 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';
}
}

Output:

a = "a"
b = " "
c = "b"

从输出中可以看出,b 被赋予了 "a""b" 之间的空格值; c 被赋予以下字符 "b"。我期望 bc 根本没有值,因为提取应该因前导空格而失败。这种行为的原因是什么?

最佳答案

在 IOStreams 中,字符几乎没有格式要求。字符序列中的任何和所有字符都是提取的有效候选字符。对于使用数字方面的提取器,提取被定义为在空白处停止。然而,charT& 的提取器直接在缓冲区上工作,可能通过调用 rdbuf()->sbumpc() 不加区别地返回下一个可用字符。

不要假设此行为会扩展到字符指针的提取器,因为它们的提取被明确定义为在空白处停止。

关于c++ - 为什么 std::operator>>(istream&, char&) 提取空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21820867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com