关于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(‘\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下则不会有什么输出。

时间: 2024-08-10 21:18:06

关于cout<<ends你不知道的那些事的相关文章

开源 VS 商业,消息中间件你不知道的那些事

11月23日,新炬网络中间件技术专家刘拓老师在DBA+社群中间件用户组进行了一次主题为“开源 VS 商业,消息中间件你不知道的那些事”的线上分享.小编特别整理出其中精华内容,供大家学习交流. 嘉宾简介 新炬网络中间件技术专家 曾任职于IBM华南GTS 4年,IBM WebSphere.MQ.CICS产品线技术专家 5年移动运营商(广东移动.浙江移动)运维经验,3年JAVA开发及售后经验 演讲实录 随着云计算的兴起,Docker.微服务的流行,分布式消息队列技术成为云计算平台中不可或缺的组件.今天

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

一.概述 这篇文章主要分享Endpoint 终结点路由的中间件的应用场景及实践案例,不讲述其工作原理,如果需要了解工作原理的同学, 可以点击查看以下两篇解读文章: Asp.Net Core EndPoint 终结点路由工作原理解读 ASP.NET CORE 管道模型及中间件使用解读 1.1 中间件(Middleware)的作用 我们知道,任何的一个web框架都是把http请求封装成一个管道,每一次的请求都是经过管道的一系列操作,最终到达我们写的代码中.那么中间件就是在应用程序管道中的一个组件,用

transform你不知道的那些事

transform是诸多css3新特性中最打动我的,因为它让方方正正的box module变得真实了. transform通过一组函数实现了对盒子大小.位置.角度的2D或者3D变换.不过很长时间内,我对以下问题都想不太明白: 1.尺寸缩放scale与zoom变换有何不同,为什么被scale的盒子里的内容不会错位,但zoom不是. 2.位移(transform:translate)与相对定位.绝对定位(position:relative | absolute)有何关系? 3.在实际项目中发现,位图

EntityFramework之你不知道的那些事(七)

前言 前面一系列几乎都是循序渐进式的进行叙述,似乎脚步走得太快了,于是我开始歇一歇去追寻一些我所不太了解的细枝末节,在此过程中也屡次碰壁,但是唯有如此才能更好的成长,不是吗!希望此文对你亦有帮助. 属性私有化 我们之前有点太循规蹈矩对于模型的建立,所以你才不会遇到问题(当然我也是),也许你大概也这样做过,当建立实体时我们都是建立公有的(public)的,那为什么不试试私有(private)的呢?建立一个学生(Student)类并给其一个私有属性,如下: public class Student

editplus - 你不知道的那些事

一. 使用editplus去重: 1. 菜单栏选择"工具" -> "排序" 2. 勾选"删除重复行", 再点击"排序"就可以了 二. 矩形选取: 按住alt键, 然后用鼠标划矩形选取.这个在批量删掉前端行号的时候很有效.

iOS应用安全开发,你不知道的那些事

来源:http://www.csdn.net/article/2014-04-30/2819573-The-Secret-Of-App-Dev-Security 摘要:iOS应用由于其直接运行在手机上,相比运行在服务器的后台服务,更有可能被黑客攻击.本文将从网络安全.本地文件和数据安全.源代码安全三个方面,阐述iOS应用在安全性上遇到的挑战. 联网领域,安全已然是一个老生常谈的话题.许多大公司都设置有专门的安全部门,用于检测自己产品的安全性.但即便是这样,业界仍然时常爆出许多安全问题引发的新闻.

Javascript你不知道的那些事!(数字计算篇-变态篇)

javascript:alert(0.1 + 0.2) 如果看到这样一道题你会怎么思考了!大家肯定第一反应0.3,但是考虑到我已经这样问了!那么幼稚的答案我会专门写篇文章吗 然后人就开始折磨自己了会不会是 0.10.2呢 然后结果还是很拉风的 0.30000000000000004 再来0.1+0.7 0.7999999999999999 这是由于十进制到二进制的转换导致的精度问题!因为计算机执行的是二进制算术,当一个十进制数不能准确的转化着二进制数时,这种精度误差就无法避免.如果对这简单的原因

ios项目开发汇总

UI界面 iOS和Android 界面设计尺寸规范  http://www.alibuybuy.com/posts/85486.html iPhone app界面设计尺寸规范  http://www.wufangbo.com/ios-iphone-app/ iOS界面设计切图小结  http://www.apkbus.com/android-140341-1-1.html @2x图片等适应不同分辨率手机   http://blog.sina.com.cn/s/blog_945590aa0101c

iOS开发中的数据安全隐患和解决方案

移动互联网的兴起,每天都会涌现大量的app产品,无论公司开发还是个人开发,大家都在追求更快的抢占市场,但是确忽略了打磨产品,也忽略了移动开发中的数据安全隐患,如果我们用Charles工具,很容易截获到很多知名的app的传输的隐私数据,包括用户名和账号信息等.比如下图是我用Charles(青花瓷)软件截获糗事百科明文方式传输的用户名和账号信息,网上了解到神州租车和一嗨租车的用户登陆也是明文传输,明文传输很容易被截获.下文我就将我今天查阅各种资料学到的关于iOS中数据安全的知识总结下来和大家分享.