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

标签 c++ libc++

在 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/

相关文章:

c++ - 从工厂返回时向上转换 unique_ptr 的正确方法

c++ - C 和 C++ 库错误

c++ - 您将什么称为单个 header ,其目的是包含其他 header 文件?

C++逗号与数字的奇怪行为

c++ - 如何在 Visual Studio 中更改 C++ 标准库实现

c++ - std::map 是否要求比较器的 operator() 为 const?

c++ - clang 的 libc++ 产品准备好了吗?

c++ - 成员函数和复制构造函数

clang - 在 Ubuntu 上使用 Clang 3.0 编译 libc++ 时出错

c++ - 使用 lambda 构造 std::function 时 libstdc++ 和 libc++ 之间的不同行为