我的第一篇文章,所以请客气:)
此代码段来自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/