关于cout<<ends你不知道的那些事
关于ends是C++中比较基础的一个东西,但是可能不是每个人都能够清楚的理解这是个什么东西,我就经历了这么一个过程,写出来让大家看看,有什么理解的不对的地方欢迎拍砖。
今天以前我对ends的理解是:输出空格的工具,或者说这就是一个逼格比较高的“ ”。(这貌似是拜老师所赐,特地翻出课件发现就是这么写的,输出空格。。。相信有不少人是这么看的吧)
今天由于某些原因发现 cout<<ends;和cout<<" ";貌似不是一个东西,于是开始探究:
一、cplusplus的解释(http://www.cplusplus.com/reference/ostream/ends/?kw=ends)
这个网站是最权威的C++相关的网页,在上面找到了ends的定义:
_CRTIMP inline basic_ostream<char, char_traits<char> >&
__cdecl ends(basic_ostream<char, char_traits<char> >& _O)
{
_O.put('\0');
return (_O);
}
从这我们不难发现ends实际上是输出了一个'\0'字符,并不是我们想象的空格。
二、为什么有时候使用ends输出的的确是空格
同时我看到了msdn上的解释(http://msdn.microsoft.com/zh-cn/library/a0cyxz1b.aspx),这个讲的原理也是一样的输出'\0',但是下面有个例 子:
// ostream_ends.cpp
// compile with: /EHsc
#include <iostream> int main( )
{
using namespace std;
cout << "a";
cout << "b" << ends;
cout << "c" << endl;
}
这个的输出是
ab c
这又有点令人不解了,为什么这个ends当空格又能使了呢。于是我猜测是因为系统的差异,于是我进行了如下实验:
1、windows下运行
#include<iostream>
using namespace std;
int main()
{
cout<<"ddd"<<'\0'<<"dsad"<<endl;
}
输出:
ddd dsad
2、Ubuntu下运行同样的代码
输出:
ddddsad
三、总结
到这里我觉得这个原因就出来了,其实C++对ends的处理时一样的,都是在缓冲区插入'\0'然后刷新,之所以在不同的系统下的显示情况不同是因 为,windows和linux对'\0'的处理方式不同,在windows中会输出一个空格,而linux下则不会有什么输出。
关于cout<<ends你不知道的那些事的更多相关文章
- 开源 VS 商业,消息中间件你不知道的那些事
11月23日,新炬网络中间件技术专家刘拓老师在DBA+社群中间件用户组进行了一次主题为“开源 VS 商业,消息中间件你不知道的那些事”的线上分享.小编特别整理出其中精华内容,供大家学习交流. 嘉宾简介 ...
- EntityFramework之你不知道的那些事(七)
前言 前面一系列几乎都是循序渐进式的进行叙述,似乎脚步走得太快了,于是我开始歇一歇去追寻一些我所不太了解的细枝末节,在此过程中也屡次碰壁,但是唯有如此才能更好的成长,不是吗!希望此文对你亦有帮助. 属 ...
- transform你不知道的那些事
transform是诸多css3新特性中最打动我的,因为它让方方正正的box module变得真实了. transform通过一组函数实现了对盒子大小.位置.角度的2D或者3D变换.不过很长时间内,我 ...
- 关于bitmap你不知道的一些事
1.计算机表示图形的几种方式 1)BMP :几乎不进行压缩 占用空间比较大 2)JPG : 在BMP的基础上对相邻的像素进行压缩,占用空间比BMP小 3) PNG : 在JPG的基础上进一步压缩 占用 ...
- Javascript你不知道的那些事!(数字计算篇-变态篇)无意中聊天发现的一些奇怪的事情
javascript:alert(0.1 + 0.2) 如果看到这样一道题你会怎么思考了!大家肯定第一反应0.3,但是考虑到我已经这样问了!那么幼稚的答案我会专门写篇文章吗 然后人就开始折磨自己了会不 ...
- iOS应用安全开发,你不知道的那些事
来源:http://www.csdn.net/article/2014-04-30/2819573-The-Secret-Of-App-Dev-Security 摘要:iOS应用由于其直接运行在手机上 ...
- vue中动态引入图片为什么要是require, 你不知道的那些事
相信用过vue的小伙伴,肯定被面试官问过这样一个问题:在vue中动态的引入图片为什么要使用require 有些小伙伴,可能会轻蔑一笑:呵,就这,因为动态添加src被当做静态资源处理了,没有进行编译,所 ...
- Es6的那些事
现在看招聘网站上的要求,作为前端er~都要熟悉甚至精通(滑稽脸)es6,项目中也经常用,啥let,const,尤其是用react的同学,肯定对解构赋值不会陌生,今天逛淘宝前端的博客,看到一篇名为Es6 ...
- 输出1到最大的N位数
题目:输入数字n,按顺序输出从1最大的n位10进制数.比如输入3,则输出1.2.3一直到最大的3位数即999. 分析:这是一道很有意思的题目.看起来很简单,其实里面却有不少的玄机. 应聘者在解决这个问 ...
随机推荐
- Calico在Docker中的搭建
一,Multi-host网络需求 开始之前推荐两篇文章 http://xelatex.github.io/2015/11/15/Battlefield-Calico-Flannel-Weave-and ...
- iOS NSObject 的 isa 属性的类型 Class
以前对NSObject的isa属性也知道点,但是了解不深,今天看了这篇博文,感觉很好,总结一下: http://chun.tips/blog/2014/11/05/bao-gen-wen-di-obj ...
- iOS 关于UIWindow的理解
Every iOS app has a window that handles the presentation of the app’s user interface. Although the w ...
- redis+crontab+php异步处理任务
2016年1月8日 16:08:43 星期五 情景: 用户登录日志, 发邮件, 发短信等等实时性要求不怎么高的业务通常会异步执行 之前接触过几种redis+crontab配套的实现方法, 比如: cr ...
- Pooled Allocation(池式分配)实例——Keil 内存管理
引言:说到动态申请(Dynamic Allocation)内存的好处,学过C/C++的人可能都有体会.运行时的灵活申请自然要比编码时的猜测好的多.而在内存受限情况下这种灵活性又有特别的好处--能让我们 ...
- Java for LeetCode 229 Majority Element II
Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorit ...
- 【leetcode】Binary Tree Postorder Traversal (hard) ☆
二叉树的后序遍历 用标记右子树vector的方法 vector<int> postorderTraversal(TreeNode *root) { vector<int> an ...
- 【leetcode】Bitwise AND of Numbers Range(middle)
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers ...
- php生成对象的研究
<?php abstract class E{ protected $name; function __construct($name){ $this->name = $name; } a ...
- 25个增强iOS应用程序性能的提示和技巧(初级篇)
25个增强iOS应用程序性能的提示和技巧(初级篇) 标签: ios内存管理性能优化 2013-12-13 10:53 916人阅读 评论(0) 收藏 举报 分类: IPhone开发高级系列(34) ...