• 关于cout<<ends你不知道的那些事


    关于ends是C++中比较基础的一个东西,但是可能不是每个人都能够清楚的理解这是个什么东西,我就经历了这么一个过程,写出来让大家看看,有什么理解的不对的地方欢迎拍砖。

    今天以前我对ends的理解是:输出空格的工具,或者说这就是一个逼格比较高的“ ”。(这貌似是拜老师所赐,特地翻出课件发现就是这么写的,输出空格。。。相信有不少人是这么看的吧)

    今天由于某些原因发现 cout<<ends;和cout<<" ";貌似不是一个东西,于是开始探究:

    一、cplusplus的解释(http://www.cplusplus.com/reference/ostream/ends/?kw=ends)

      这个网站是最权威的C++相关的网页,在上面找到了ends的定义:

    1 _CRTIMP inline basic_ostream<char, char_traits<char> >&
    2  __cdecl ends(basic_ostream<char, char_traits<char> >& _O)
    3  {
    4     _O.put('');
    5      return (_O);
    6  }

      从这我们不难发现ends实际上是输出了一个''字符,并不是我们想象的空格。

    二、为什么有时候使用ends输出的的确是空格

      同时我看到了msdn上的解释(http://msdn.microsoft.com/zh-cn/library/a0cyxz1b.aspx),这个讲的原理也是一样的输出'',但是下面有个例  子:

     1 // ostream_ends.cpp
     2 // compile with: /EHsc
     3 #include <iostream>
     4 
     5 int main( ) 
     6 {
     7    using namespace std;
     8    cout << "a";
     9    cout << "b" << ends;
    10    cout << "c" << endl;
    11 }

      这个的输出是

      ab c

      这又有点令人不解了,为什么这个ends当空格又能使了呢。于是我猜测是因为系统的差异,于是我进行了如下实验:

      1、windows下运行

    1 #include<iostream>
    2 using namespace std;
    3 int main()
    4 {
    5     cout<<"ddd"<<''<<"dsad"<<endl;
    6 }

      输出:

      ddd dsad

      2、Ubuntu下运行同样的代码

      输出:

      ddddsad

    三、总结

      到这里我觉得这个原因就出来了,其实C++对ends的处理时一样的,都是在缓冲区插入''然后刷新,之所以在不同的系统下的显示情况不同是因    为,windows和linux对''的处理方式不同,在windows中会输出一个空格,而linux下则不会有什么输出。

  • 相关阅读:
    cas 单点登录(SSO)实验之二: cas-client
    前端要给力之:语句在JavaScript中的值
    【Linux】Tomcat安装及一个服务器配置多个Tomcat
    【Linux】 JDK安装及配置 (tar.gz版)
    Android自动化测试中AccessibilityService获取控件信息(1)
    Android自动化框架 模拟操作 模拟测试
    Android应用程序如何调用shell脚本(一)
    关于lidroid xUtils 开源项目
    android 开源项目列表【持续整理中。。。】
    android开发常用组件【持续更新中。。。】
  • 原文地址:https://www.cnblogs.com/MrLJC/p/3749782.html
Copyright © 2020-2023  润新知