关于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('\0');
5      return (_O);
6  }

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

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

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

 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"<<'\0'<<"dsad"<<endl;
6 }

  输出:

  ddd dsad

  2、Ubuntu下运行同样的代码

  输出:

  ddddsad

三、总结

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

转载于:https://www.cnblogs.com/MrLJC/p/3749782.html

关于coutends你不知道的那些事相关推荐

  1. java 静态代码块_关于Java你不知道的那些事之代码块

    前言 普通代码块:在方法或语句中出现的{},就被称为代码块 静态代码块:静态代码块有且仅加载一次,也就是在这个类被加载至内存的时候 普通代码块和一般语句执行顺序由他们在代码中出现的次序决定,先出现先执 ...

  2. 看完就会明白windows RT推出的原因、它和window 8到底有些什么区别、微软有什么战略企图--有关于微软Windows RT 你不知道的那些事

    关于微软Windows RT 你不知道的那些事 Microsoft与Windows这两个单词对于个人电脑用户而言可以说无人不知,最初的微软Windows系统仅是PC端为用户提供办公与生活的操作系统软件 ...

  3. 关于系统架构你不知道的那些事-架构设计流程:评估和选择备选方案

    关于系统架构你不知道的那些事-架构设计流程:评估和选择备选方案 前言 架构设计第 3 步:评估和选择备选方案 评估和选择备选方案实战 备选方案 1:采用开源 Kafka 方案 备选方案 2:集群 + ...

  4. 关于系统架构你不知道的那些事-架构设计流程:设计备选方案

    关于系统架构你不知道的那些事-架构设计流程:设计备选方案 前言 架构设计第 2 步:设计备选方案 第一种常见的错误:设计最优秀的方案. 第二种常见的错误:只做一个方案. 第三种常见的错误:备选方案过于 ...

  5. 读研期间学计算机,你不知道的考研事之读研期间学习生活大揭秘(学习篇)

    随着各大院校考研复试的陆续进行,研究生招生阶段也逐渐进入尾声.接下来一批又一批努力而优秀的同学在经过备考.初试.复试的洗礼也将步入令人振奋的研究生阶段,开启人生的新篇章.这既是对于奋发拼搏精神的总结和 ...

  6. 北京指标公户你不知道的那些事

    北京指标公户你不知道的那些事,不看后悔哦 自从北京实施机动车限号政策到现在 北京小客车指标摇号命中率真是"镜中花,水中月"可望而不可即来形容了 小编亲身经历过37期摇号的客户,对此 ...

  7. 关于移动广告平台,你不知道的那些事

    移动互联网进入存量博弈时代. 智能手机出货量下降,用户增速放缓,用户时长逐渐见顶--营销人员纷纷采取更加激进的广告营销策略获取用户. 但面对日益繁多的移动广告平台,广告主在选择变多的同时也对其选择高效 ...

  8. java compare 返回值_关于Java你不知道的那些事之Java8新特性[Lambda表达式和函数式接口]...

    前言 为什么要用Lambda表达式? Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,将代码像数据一样传递,这样可以写出更简洁.更灵活的代码,作为一个更紧凑的代码风 ...

  9. Asp.Net Core 中间件应用实战中你不知道的那些事

    一.概述 这篇文章主要分享Endpoint 终结点路由的中间件的应用场景及实践案例,不讲述其工作原理,如果需要了解工作原理的同学, 可以点击查看以下两篇解读文章: •Asp.Net Core EndP ...

  10. 期刊投稿状态_论文投稿,你不知道的那些事

    解读论文写作与发表策略 助您成功发表 关注 做实验难.写论文难.投稿更难,别以为做实验才是一门技术活,投稿也是,有经验的作者,一击即中. 本文总结一些投稿过程中的细节处理,状态解析,希望能够帮助正在打 ...

最新文章

  1. 【综述专栏】自动驾驶中可解释AI的综述和未来研究方向
  2. leetcode-350- 两个数组的交集 II
  3. Squid 代理服务器应用大全
  4. CentOS 安装及使用 terraform 最新教程
  5. 【2018.4.7】模拟赛之五-ssl2386 序列【dp】
  6. Unicode汉字编码
  7. oracle 11g RAC无法采用deinstall自动卸载grid,手动卸载,超级棒!
  8. java零碎要点013---java lambda 表达式中的双冒号的用法 ::
  9. 24. 二叉搜索树的后续遍历序列(c++版本)
  10. DL实战(3):cfNet- Matlab配置
  11. JVM监控Jconsole
  12. xp系统怎么telnet服务器,xp操作系统如何开启telnet服务?
  13. Excel——检查单元格是否包含文本(不区分大小写)
  14. 【转】sql server创建复合主键的2种方法
  15. 在岸人民币和离岸人民币的区别
  16. python鱼眼图像识别_使用OpenCV校准鱼眼镜头的方法
  17. STM32-UART串口应用
  18. 新的空难事故,正在酝酿中……?
  19. 凸轮,凸轮设计,凸轮设计软件,凸轮设计代做
  20. ffmpeg命令分析-re

热门文章

  1. 线程学习记录-锁原理与对象头
  2. Oraclealterindexrebuild与ORA08104说明
  3. ubuntu下好用的录屏软件之Vokoscreen
  4. linux查看目录是不是btrfs,Linux之btrfs详解2015082901
  5. 只查看ett.txt文件(100行)内第20行到30行的内容
  6. Qt与Matlab混合编程中mwArray数组使用详解
  7. mutate  字段替换
  8. 项目一 认识Linux操作系统
  9. 疫情之下要不要转行?
  10. C++ 类型A支持强制转换类型B的写法