我想知道__cerb
libstdc++
对g++
的含义是什么,我发现这似乎是cerberos
的一个简称,正如官方所说的那样C ++标准文档。
§22.3.1/ 3:
[示例:iostream
operator<<
可能实现为: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; }
- 结束示例]
为什么iostream sentry
对象名为cerberos
,cerberos
实际上是什么意思?
答案 0 :(得分:12)
Cerberus was the three headed dog1 who guarded the gates of hell,让陷入困境的人不要越过Styx河。谁写了这一部分想象希腊和/或罗马神话,并决定它将是一个适用于当地变量哨兵的名称。
至于为什么它以 os 结束,可以想象三种情况:
<子> 1。显然,Cerberus的头数是多变的。也许这更好地表达为“N头狗,其中N大于或等于1.”