博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于cout<<ends你不知道的那些事
阅读量:5251 次
发布时间:2019-06-14

本文共 1273 字,大约阅读时间需要 4 分钟。

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

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

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

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

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

1 _CRTIMP inline basic_ostream
>&2 __cdecl ends(basic_ostream
>& _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 
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
2 using namespace std;3 int main()4 {5 cout<<"ddd"<<'\0'<<"dsad"<

 

  输出:

  ddd dsad

  2、Ubuntu下运行同样的代码

  输出:

  ddddsad

三、总结

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

 

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

你可能感兴趣的文章
DuiLib 去除windows边框的问题
查看>>
响应式布局
查看>>
1007 素数对猜想
查看>>
transition和animation动画简介
查看>>
创建app-django
查看>>
VS2015复制VS2013的项目,编译报错
查看>>
如何有效的思考
查看>>
scala学习笔记:match与unapply()
查看>>
目录操作
查看>>
[MTK FP]如何通过ICON ID的value找到对应的ICON
查看>>
KindEditor在线HTML文本编辑器在asp.net中的使用
查看>>
Django的ORM实现数据库事务操作
查看>>
数理方程:Laplace变换 & 留数(更新中)
查看>>
Centos 6.9 install Python3.7
查看>>
laydate 显示结束时间不小于开始时间
查看>>
C# 网上收集的一些所谓的开源项目
查看>>
ASP.NET在IIS7中如何更改网站的.net framework框架版本
查看>>
6月19 琐碎知识点
查看>>
HTML5常用的方法
查看>>
第一个 MVC 应用程序(下半部分)
查看>>