8

我想知道 of 的含义是什么,__cerb我发现这似乎是官方 C++ 标准文档中命名的简称。libstdc++g++cerberos

§ 22.3.1 / 3:

[ 示例:iostreamoperator<<可以实现为:

template <class charT, class traits>
basic_ostream<charT,traits>&
operator<< (basic_ostream<charT,traits>& s, Date d) {
                                                            //      !!!!!!!!!!
  typename basic_ostream<charT,traits>::sentry cerberos(s); // <--- !! HERE !!
                                                            //      !!!!!!!!!!
  if (cerberos) {
    ios_base::iostate err = ios_base::iostate::goodbit;
    tm tmbuf; d.extract(tmbuf);
    use_facet<time_put<charT,ostreambuf_iterator<charT,traits> > >(
      s.getloc()).put(s, s, s.fill(), err, &tmbuf, ’x’);
    s.setstate(err);            // might throw
  }
  return s;
}

—结束示例]

为什么 iostreamsentry对象被称为cerberoscerberos实际上是什么意思?

4

1 回答 1

12

Cerberus 是守卫地狱之门的三头犬1,不让那些被困在里面的人越过 Styx 河。写该部分的人喜欢希腊和/或罗马神话,并认为这将是局部变量哨兵的适用名称。

至于为什么以os结尾,可以想象三种情况:

  1. 他们完全忘记了希腊语和拉丁语名词偏角的规则,并认为这就是它的拼写方式
  2. 我完全忘记了希腊语和拉丁语名词偏角的规则,并指出了一个非问题。
  3. 他们将 Cerberus 和 Kerberos 的拼写混为一谈,从而产生了 Cerberos 希腊和罗马血统的 basic_stream 哨兵。

1. 显然 Cerberus 上的正面数量是可变的。也许这更好地表达为“N 头狗,其中 N 大于或等于 1”。

于 2013-03-01T23:41:04.807 回答