libc ++ ios_base :: clear的定义在哪里?

时间:2014-02-13 19:04:40

标签: c++ libc++

在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()

1 个答案:

答案 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()只是内联转发到此常见实现。

简而言之:“为什么”是代码大小优化。