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++
          主站蜘蛛池模板: 闽侯县| 依安县| 漠河县| 绥宁县| 北流市| 中牟县| 收藏| 贵阳市| 五指山市| 迁安市| 长岛县| 广安市| 姜堰市| 南部县| 砀山县| 津南区| 龙江县| 开化县| 十堰市| 南部县| 丹江口市| 大英县| 桓仁| 广安市| 菏泽市| 北宁市| 鄂尔多斯市| 胶州市| 酒泉市| 岑溪市| 阿拉善右旗| 喀什市| 新津县| 屏东市| 东兰县| 克东县| 内黄县| 桃园县| 灵璧县| 兴安县| 昌都县|