【问题标题】:How does QIODevice::readLine(qint64 maxSize = 0) works?QIODevice::readLine(qint64 maxSize = 0) 是如何工作的?
【发布时间】:2022-01-10 04:16:19
【问题描述】:

此方法的documentation 声明:

QByteArray QIODevice::readLine(qint64 maxSize = 0)
这是一个重载函数。
从设备中读取一行,但不超过 maxSize 个字符,并将结果作为字节数组返回。

但是,我注意到即使我们通过maxSize = 0,即。不要传递任何东西,readLine() 在行中发送几个字节。这是一个定义明确的行为吗?

此外,这是一个十年前关于同一主题的问题:QIODevice::readLine(qint64 maxSize = 0) default argument performs poorly (should be documented)。这仍然相关吗?

【问题讨论】:

  • 我的猜测是,maxSize == 0 是一个特殊值,表示“无限制”。如果将 0 设为默认值意味着“根本不阅读任何内容”,那么将其设为默认值是没有意义的。不幸的是,文档没有说明这一点。
  • @IgorTandetnik 你是对的(Qt 人应该修复他们的 API 文档!)——在 qiodevice.cpp 的第 1466 行,我们有这个:if (maxSize == 0) maxSize = MaxByteArraySize - 1;
  • @JeremyFriesner 或 Igor,请将此作为答案发布,我会接受。如果你看过源代码,即使是子问题也很容易回答。

标签: c++ qt readline behavior qbytearray


【解决方案1】:

Qt API 文档中没有提到,但是将值 0 作为maxSize 参数传递被视为具有“尽可能多的字节”的特殊含义。可以在 Qt 的 qiodevice.cpp 源文件的第 1466 行看到该意图的证据:

if (maxSize == 0) maxSize = MaxByteArraySize - 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多