【发布时间】:2018-02-22 07:50:48
【问题描述】:
在CPlusPlus website 为std::istream::ignore,上面写着
istream& ignore (streamsize n = 1, int delim = EOF);提取和丢弃字符
从输入中提取字符 序列并丢弃它们,直到已经有 n 个字符 提取,或比较等于 delim。
为什么它说它丢弃它们而不是退回它们?
编辑
根据要求,这里是有问题的特定代码。它是一个回调函数,服务端,处理发送的客户端文件(_data)
static void loadFile (const std::string &_fileName, std::vector<char> &_data)
{
std::ifstream ifs;
ifs.exceptions(std::ifstream::failbit);
ifs.open(_fileName, std::ifstream::in | std::ifstream::binary);
auto startPos = ifs.tellg();
ifs.ignore(std::numeric_limits<std::streamsize>::max());
auto size = static_cast<std::size_t>(ifs.gcount());
ifs.seekg(startPos);
_data.resize(size);
ifs.read(_data.data(), size);
std::cout << "loaded " << size << " bytes" << std::endl;
}
【问题讨论】:
-
我不认为我理解这个问题......它丢弃它们,因为它们被扔掉,你不'在您编写的任何代码中都看不到或使用它们。
-
同意这个问题有点不清楚。也许您可以解释为什么您认为“退货”更合适
-
这甚至是函数 name 的一部分,用于ignore 事物。
-
这是读取行首的常用方法,然后忽略(并丢弃)该行的其余部分。当使用格式化输入(
>>运算符)时,它对文本文件有意义,但不适用于一般的“二进制”文件或使用read读取更大的块时。没有更多的上下文,我们只能猜测得很差,即使有上下文,我们仍然只能猜测。只有编写代码的人才能可靠地回答您的问题。 -
我认为这个问题有可能成为一个好问题,如果你重新表述它以询问你发布的 sn-p 中
ignore的使用(而不是为什么一个名为ignore的函数) ,好吧,忽略输入)。