我的第一篇文章,所以请客气:)

此代码段来自Poco库项目:

void SyslogParser::parse(const std::string& msg)
{
// <int> -> int: lower 3 bits severity, upper bits: facility
std::size_t pos = 0;
RemoteSyslogChannel::Severity severity;
RemoteSyslogChannel::Facility fac;
parsePrio(msg, pos, severity, fac);

// the next field decide if we parse an old BSD message or a new syslog message
// BSD: expects a month value in string form: Jan, Feb...
// SYSLOG expects a version number: 1

if (Poco::Ascii::isDigit(msg[pos]))
{
    parseNew(msg, severity, fac, pos);
}
else
{
    parseBSD(msg, severity, fac, pos);
}
poco_assert (pos == msg.size());
}

我在这里不了解std::size_t的角色。我认为std::size_t会创建一个对象(取决于平台等的uint32或uint64),该对象可以容纳其他一些对象的大小。这种理解正确吗?

因此,在这里发生的是,我们正在创建一个uint并将其用作位域。如果我了解正在做什么,那么我必须问为什么?与仅声明一个uint相比,以这种方式生成uint有什么好处?

不问作者,只是试图了解采用这种方法的好处。有速度或效率优势吗?

最佳答案

我以为std::size_t将创建一个对象(uint32或uint64,具体取决于平台等),该对象可以容纳其他一些对象的大小。这种理解正确吗?

std::size_t是一种类型,可用于保存C / C++程序中任何对象的大小。

通常,函数使用std::size_t类型作为接收对象/类型大小作为函数参数的标准方式。由于poco库函数使用std::size_t作为类型,因此调用者在调用这些函数时需要创建具有相同类型的参数。

关于c++ - std::size_t实例化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7136443/

10-17 02:10