posts - 134,comments - 22,trackbacks - 0
          以前一直沒有關心std::endl的工作機制,最近突然想一窺究竟,于是下載了sgi的stl(http://www.sgi.com/tech/stl/)實現,
          于是恍然大悟,對其實現者真是敬佩。

          在文件Ostream中class basic_ostream 有如下成員函數:

           basic_ostream& operator<< (basic_ostream& (*__f)(basic_ostream&))
              { return __f(*this); }

           basic_ostream& operator<< (_Basic_ios& (*__f)(_Basic_ios&))
              { __f(*this); return *this; }

           basic_ostream& operator<< (ios_base& (*__f)(ios_base&))
              { __f(*this); return *this; }

          然后有如下全局函數:
          template <class _CharT, class _Traits>
          inline basic_ostream<_CharT, _Traits>&
          endl(basic_ostream<_CharT, _Traits>& __os) {
            __os.put(__os.widen('\n'));
            __os.flush();
            return __os;
          }

          可見原來我們經常使用的cout<<.....<<endl中的endl竟然是一個函數指針,由此我們還可以找到如下定義:

          // basefield manipulators, section 27.4.5.3
          inline ios_base& dec(ios_base& __s)
            { __s.setf(ios_base::dec, ios_base::basefield); return __s; }

          inline ios_base& hex(ios_base& __s)
            { __s.setf(ios_base::hex, ios_base::basefield); return __s; }

          inline ios_base& oct(ios_base& __s)
            { __s.setf(ios_base::oct, ios_base::basefield); return __s; }

          原來這些我們經常見到的C++流輸出格式符居然都是一些函數,都是通過重載<<操作符來實現的。
          http://www.cppblog.com/luke/archive/2009/04/01/78572.html
          posted on 2009-11-15 12:21 何克勤 閱讀(302) 評論(0)  編輯  收藏 所屬分類: C/C++
          主站蜘蛛池模板: 马龙县| 平原县| 潞城市| 五寨县| 涟水县| 沽源县| 武汉市| 静乐县| 调兵山市| 余庆县| 潢川县| 洛扎县| 和静县| 溧阳市| 水城县| 广宁县| 安宁市| 卓尼县| 香港 | 交口县| 芮城县| 天全县| 石棉县| 剑阁县| 平昌县| 清流县| 慈溪市| 德令哈市| 南丹县| 辽宁省| 云林县| 鲁山县| 游戏| 新蔡县| 丰原市| 介休市| 依安县| 南乐县| 察哈| 天镇县| 通河县|