【发布时间】:2023-01-29 00:25:10
【问题描述】:
关于重写的 std::streambuf::overflow 函数应该如何简单地获取写入流的每个字符,我发现的有用信息很少。所以我向 ChatGPT 寻求一些建议。它不断回到这个概念:
int overflow(int c)
{
if (c == EOF)
{
// Flush the buffer here
return !EOF;
}
// Put c in the buffer here
if (c == '\n')
{
// Flush the buffer here
}
return c;
}
当 c 是 EOF 时,它返回 !EOF 真是太奇怪了。
The docs不要详细说明“成功”是什么意思。
This page 表示当以 EOF 作为参数调用时(或发出“失败”信号时),它应该返回 EOF(而不是 !EOF)。
所以:我怀疑在这里返回 !EOF 是错误的并且我应该返回 EOF 是否正确?
如果您能告诉我 ChatGPT 从哪里得到这个想法,请使用 Cookie 点数。我在互联网上的其他任何地方都找不到return !EOF;。
【问题讨论】:
-
@Someprogrammerdude 是否用 EOF 调用它作为被认为“成功”的参数?此外,
Traits::eof()是一个常量值,所以我不确定“如果流已到达文件末尾,Treats::eof() 返回 true”是什么意思。!EOF变为false,变为 0。 -
这可能与成功时需要返回不同于
Traits::eof()的值的函数有关。显然代码认为EOF是一个成功的案例。 -
话虽如此,ChatGPT 对于实际和事实信息来说确实不可靠。它可以生成看起来不错且真实的文本和代码,但仔细观察往往并非如此。这里禁止使用 ChatGPT 生成的答案是有原因的。我不会相信它生成的任何代码。
-
!EOF没有任何意义(这只是拼写常量false的一种有趣方式)。 -
“我问 ChatGPT” 你得到了你付出的代价。