在libc ++标题中,<ios>
可在此处查看:
https://github.com/llvm-mirror/libcxx/blob/master/include/ios
有两个class ios_base
声明,“libcpp版本”有clear
方法,ios_base::clear()
而另一个没有。这是一种公共方法,此处不再描述:
http://en.cppreference.com/w/cpp/io/ios_base
此外,在上面引用的实现中,basic_ios::clear()
调用了ios_base::clear()
但似乎没有在任何地方定义。在libstdc ++中,它的实现可以在这里看到:
http://repo.or.cz/w/official-gcc.git/blob/HEAD:/libstdc%2B%2B-v3/include/bits/basic_ios.tcc
所以我的问题是:
1)为什么libc ++中有公共ios_base::clear()
方法?
2)我在哪里可以找到如何在libc ++中实现basic_ios::clear()
?
答案 0 :(得分:1)
我想你可以因此而责怪我。
我发现抛出异常是代码大小不小的东西。因此,我希望概述在可能的情况下投入源的函数。
basic_ios::clear()
有时必须抛出异常,并且也是模板类。如果我正确回忆起来,这让我感到恼火,因为rdstate
显然不依赖于basic_ios
模板参数:CharT, Traits
。所以我在基类(rdstate
)中实现了ios_base
,这样任何关联的非内联代码都可以由basic_ios
的所有实例共享。
正如sty正确指出的那样,ios_base::clear()
在src / ios.cpp中实现。它在protected
中声明为ios_base
,然后basic_ios::clear()
只是内联转发到此常见实现。
简而言之:“为什么”是代码大小优化。