iterator

Posted by chunyang on March 10, 2016
TAGS: #cpp

STL中iterator

本文主要介绍STL中iterator。所参考的源码是g++ 4.8.2中的源码。

首先看下在根目录下头文件中的宏定义:

  • _GLIBCXX_ITERATOR:

    表示文件的include保护,防止多重引入

  • #pragma GCC system_header:

    表示直到文件结束之间的代码会被编译器视为系统头文件之中的代码. 系统头文件中的代码往往不能完全遵循C标准, 所以头文件之中的警告信息往往不显示

该文件中引用了的头文件列表如下:


#include <bits/c++config.h>
#include <bits/stl_iterator_base_types.h>
#include <bits/stl_iterator_base_funcs.h>
#include <bits/stl_iterator.h>
#include <ostream>
#include <istream>
#include <bits/stream_iterator.h>
#include <bits/streambuf_iterator.h>
#include <bits/range_access.h>

/* test highlight */
// test highlight
void shit() {
  int i = 9;
}

接下来将分别介绍其所包含的各个文件的内容。先介绍c++config.h,因为这里面的配置是很多内容的基础。

c++config.h

__attribute__关键字主要是用来在函数或数据声明中设置其属性。给函数赋给属性的主要目的在于让编译器进行优化。函数声明中的__attribute__((noreturn)),就是告诉编译器这个函数不会返回给调用者,以便编译器在优化时去掉不必要的函数返回代码。 GNU C的一大特色就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。

该文件中的定义主要是探测系统是否支持一些功能,这样利用系统自己的实现。(因为系统的实现可能会利用系统底层的一些特性,效率相对会高)