gpt4 book ai didi

c++ - 为什么 iostream 哨兵对象在标准中称为 "cerberos"?

转载 作者:可可西里 更新时间:2023-11-01 17:37:10 25 4
gpt4 key购买 nike

我在想什么__cerb表示在 libstdc++g++ , 我发现这似乎是 cerberos 的简称在官方 C++ 标准文档中命名。

§ 22.3.1/3:

[ Example: An iostream operator<< might be implemented as:

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;
}

— end example ]

为什么 iostream sentry称为 cerberos 的对象,什么是cerberos究竟是什么意思?

最佳答案

Cerberus was the three headed dog1 who guarded the gates of hell ,防止被困在里面的人越过冥河。编写该部分的人都喜欢希腊和/或罗马神话,并认为它是局部变量哨兵的适用名称。

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

  1. 他们完全忘记了希腊语和拉丁语名词变格的规则,并认为这就是拼写的方式
  2. 我完全忘记了希腊语和拉丁语名词变格规则,现在指出一个无关紧要的问题。
  3. 他们将 Cerberus 和 Kerberos 的拼写混为一谈,从而诞生了 Cerberos,即具有希腊和罗马血统的 basic_stream 哨兵。

<子>1。显然, hell 犬的头颅数量是可变的。也许这更好地表达为“N 头狗,其中 N 大于或等于 1。”

关于c++ - 为什么 iostream 哨兵对象在标准中称为 "cerberos"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15168543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com