在 libc++ header 中,<ios>
, 可在此处查看:
https://github.com/llvm-mirror/libcxx/blob/master/include/ios
class ios_base
有两个声明,“libcpp 版本”有一个 clear
方法,ios_base::clear()
而另一个则没有。这是一个公共(public)方法,这里不做描述:
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) 为什么有一个public ios_base::clear()
libc++ 中的方法?
2) 我在哪里可以找到如何 basic_ios::clear()
是用libc++实现的吗?
最佳答案
我想你可以为此责怪我。
我发现抛出异常是代码量不小的事情。因此,我喜欢概述尽可能放入源中的函数。
basic_ios::clear()
有时必须抛出异常,也是模板类。如果我没记错的话,这让我很恼火,因为 rdstate
显然不依赖于 basic_ios
模板参数:CharT、Traits
。所以我在基类 (ios_base
) 中实现了 rdstate
,这样任何关联的非内联代码都可以被 basic_ios
的所有实例共享.
作为sty正确指出,ios_base::clear()
是在 src/ios.cpp 中实现的。它在 ios_base
中被声明为 protected
,然后 basic_ios::clear()
只是对这个通用实现的内联转发。
简而言之:“为什么”是代码大小优化。
关于c++ - libc++ ios_base::clear 的定义在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21763272/