浅析C++中cout的运行机制

代码如下:

#include <iostream>
using namespace std;
int hello1();
int hello2();

int main()
{
    int a, b;
    cout<<"a="<<hello1()<<" b="<<hello2()<<endl;
    return 0;}

int hello1()
{
    cout<<"hello1"<<endl;
    return 1;
}
int hello2()
{
    cout<<"hello2"<<endl;
    return 2;
}

最终输出是:
hello2
hello1
a=1 b=2

一时让人有点难以琢磨,网上给出了其靠谱的解释:cout流的操作顺序是:先从右往左读入缓冲区,然后再从左往右输出。所以它从右边往左读的时候,碰到了函数当然去执行函数先了,然后把函数返回值读入缓冲区再然后。。。就是从左输出了。

根据这个解释,有实验的几个程序,能加深点理解

程序1:


代码如下:

#include <iostream>
using namespace std;
int main()
{
    int b[2]={1,2};
    int *a=b;
    cout<<*a<<" "<<*(a++)<<endl;
    return 0;
}

输为出:2 1。
解释:先读入*(a++),对于a++,是先读入缓冲区,其自增,所以,此时缓冲区中的a是1,。再读入*a,此时a已自增,所以读入缓冲区的是2.

程序2:


代码如下:

#include <iostream>
using namespace std;
int main()
{
    int i=5;
    cout<<i<<" "<<(i++)<<" "<<(++i)<<endl;
    return 0;
}

输出为:7 6 6
解释:从右往左,先是(++i),即先自增,再读入缓冲区,为6。再是(i++),即先读入缓冲区,为6,再自增。最后是i,读入缓冲区为7.

(0)

相关推荐

  • c++异常处理机制示例及详细讲解

    这两天我写了一个测试c++异常处理机制的例子,感觉有很好的示范作用,在此贴出来,给c++异常处理的初学者入门.本文后附有c++异常的知识普及,有兴趣者也可以看看. 下面的代码直接贴到你的console工程中,可以运行调试看看效果,并分析c++的异常机制. 复制代码 代码如下: #include "stdafx.h" #include<stdlib.h> #include<crtdbg.h> #include <iostream> // 内存泄露检测机

  • Visual C++中MFC消息的分类

    标准(窗口)消息:窗口消息一般与窗口内部运作有关,如创建窗口,绘制窗口,销毁窗口,通常,消息是从系统发到窗口,或从窗口发到系统.发送函数SendMessage()或者PostMessage().除WM_COMMAND之外,所有的以WM_开头的消息.从CWnd派生的类,都可以接受到这类消息.注意:标准消息并不需要我们指定处理函数名称,是默认的对应关系. 宏名称 对应消息 消息处理函数 ON_WM_CHAR WM_CHAR OnChar ON_WM_CLOSE WM_CLOSE OnClose ON

  • c++中的消息框messagebox()详细介绍及使用方法

    1.MessageBox("这是一个最简单的消息框!"); 2.MessageBox("这是一个有标题的消息框!","标题"); 3.MessageBox("这是一个确定 取消的消息框!","标题", MB_OKCANCEL ); 4.MessageBox("这是一个警告的消息框!","标题", MB_ICONEXCLAMATION ); 5.MessageBox(&

  • Objective-C 消息传递机制详解

    Objective-C语言中方法的传递有二种:①Selector ② Blocks,本文主要说一下Selector,关于Blocks会在后续总结一下. 消息传递模型(Message Passing)是Objective-C语言的核心机制.在Objective-C中,没有方法调用这种说法,只有消息传递. 在C++或Java中调用某个类的方法,在Objective-C中是给该类发送一个消息.在C++或Java里,类与类的行为方法之间的关系非常紧密,一个方法必定属于一个类,且于编译时就已经绑定在一起,

  • C#垃圾回收机制的详细介绍

    一.托管代码/非托管代码C#代码通过C#编译器编译成程序集,程序集由微软中间语言组成,CLR会为程序集开辟一个应用程序域,程序集就是运行在这个应用程序域里面的,应用程序域是相互独立的,互不影响.托管代码:被CLR管理的代码.非托管代码:不被CLR管理的代码.分配在栈空间的变量,一旦执行完成其所在的作用域(即大括号范围)就会被CLR回收.分配在堆里面的对象,当没有任何变量引用它的时候,这个对象就被标记为"垃圾对象"(没有变量引用它),等待垃圾回收器回收.Eg: 复制代码 代码如下: Pe

  • Windows消息传递机制详解

    对于windows程序设计,这里有几个关键词需要注意:消息,消息循环,窗口过程.   所谓的Windows消息传递机制就类似于生活中的物流公司.当寄件人(例如鼠标.键盘)将包裹(消息)交给物流公司(Windows系统)时,物流公司(Windows系统)会进行整理并且派发(整理及派发主要由消息循环完成),交给相应的快递员(窗口过程)来处理.快递员(窗口过程)拿到包裹(消息)后则有多种方式来处理,如立马交给收件人,等一天交给收件人,或转交给其他快递派发,这就需要在窗口过程中用swich/case来区

  • 浅析C++中cout的运行机制

    复制代码 代码如下: #include <iostream>using namespace std;int hello1();int hello2(); int main() {    int a, b;    cout<<"a="<<hello1()<<" b="<<hello2()<<endl;    return 0;} int hello1(){    cout<<"

  • 浅析Python中字符串的intern机制

    intern机制: 字符串类型作为Python中最常用的数据类型之一,Python解释器为了提高字符串使用的效率和使用性能,做了很多优化,例如:Python解释器中使用了 intern(字符串驻留)的技术来提高字符串效率,什么是intern机制?即值同样的字符串对象仅仅会保存一份,放在一个字符串储蓄池中,是共用的,当然,肯定不能改变,这也决定了字符串必须是不可变对象. 简单原理: 实现 Intern 机制的方式非常简单,就是通过维护一个字符串储蓄池,这个池子是一个字典结构,如果字符串已经存在于池

  • 浅析JavaScript中的事件委托机制跟深浅拷贝

    今天聊下JavaScript中的事件委托跟深浅拷贝 一.事件委托 首先呢,介绍一下事件绑定 //方法一:通过onclick <button onclick="clickEvent()">点击</button> <script> function clickEvent(){ alert("点击事件"); } </script> //方法二:通过addEventListener <button id="bt

  • 浅析Python3中的对象垃圾收集机制

    ###概述 GC作为现代编程语言的自动内存管理机制,专注于两件事:1. 找到内存中无用的垃圾资源 2. 清除这些垃圾并把内存让出来给其他对象使用. 在Python中,它在每个对象中保持了一个计数器,用于记录指向该对象的的引用的个数.一旦这个计数器为0时,则立即回收该对象,对象占用的内存空间将被释放. 引用计数 我们可以利用简单的变量引用和销毁窥见引用计数过程. 增加引用计数 增加引用计数的方式多种,即对象进行引用,那么计数器都会+1 # 创建第一个引用 a = 3 # 用其他变量名引用 b =

  • 在Docker容器中不需要运行sshd的原因浅析

    当开始使用Docker时,人们经常问:"我该如何进入容器?",其他人会说"在你的容器里运行一个SSH服务器".但是,从这篇博文中你将会了解到你根本不需要运行SSHd守护进程来进入你的容器.当然,除非你的容器就是一个SSH服务器. 运行SSH服务器是很想当然的,因为它提供了进入容器的简便方式.在我们公司基本上每个人都最少使用过一次SSH.我们中有很大一部分人每天都会使用它,并且他们很熟悉公钥与私钥,无密码登录,密钥代理,甚至有时会使用端口转发和其他不常用的功能.正因如

  • 浅析Linux中使用nohup及screen运行后台任务的示例和区别

    使用SSH终端(比如putty,xshell)连接Linux服务器上运行比较耗时任务,可能需要几个小时甚至几天才能完成,这时候终端被占据,我们还要做其他的任务呢,所以需要将这一类耗时任务放到后台来跑,只需要记录好日志就行了,有下面这些常用方法来实现这个需求. command & 在终端输入command &运行,这时候使用Ctrl + C中止命令将会失效,因为对&后台运行SIGINT1信号免疫,程序会继续运行. 但如果你直接关掉终端, 进程将跟着中止. 可见,使用&后台运行

  • Kotlin中的Checked Exception机制浅析

    前言 现在使用Kotlin的Android开发者已经越来越多了. 这门语言从一开始的无人问津,到后来成为Android开发的一级语言,再到后来Google官宣的Kotlin First.Kotlin正在被越来越多的开发者接受和认可. 许多学习Kotlin的开发者之前都是学习过Java的,并且本身Kotlin就是一款基于JVM语言,因此不可避免地需要经常和Java进行比较. Kotlin的诸多特性,在熟悉Java的开发者看来,有些人很喜欢,有些人不喜欢.但即使是不喜欢的那些人,一旦用熟了Kotli

  • 浅析Java中的异常处理机制

    异常处理机制 1.抛出异常 2.捕获异常 3.异常处理五个关键字: try.catch.finally.throw.throws 注意:假设要捕获多个异常:需要按照层级关系(异常体系结构) 从小到大! package exception; /** * Java 捕获和抛出异常: * 异常处理机制 * 1.抛出异常 * 2.捕获异常 * 3.异常处理五个关键字 * try.catch.finally.throw.throws * 注意:假设要捕获多个异常:需要按照层级关系(异常体系结构) 从小到大

  • 浅析Python 中的 WSGI 接口和 WSGI 服务的运行

    HTTP格式 HTTP GET请求的格式: GET /path HTTP/1.1 Header1: Value1 Header2: Value2 Header3: Value3 每个Header一行一个,换行符是\r\n. HTTP POST请求的格式: POST /path HTTP/1.1 Header1: Value1 Header2: Value2 Header3: Value3 body data goes here... 当遇到连续两个\r\n时,Header部分结束,后面的数据全部

  • Laravel中schedule调度的运行机制

    目录 ⒈ runInBackground 和 withoutOverlapping ⑴ runInBackground() 方法 ⑵ withoutOverlapping() 方法 ⒉ mutex 互斥锁 ⑴ 超时时间 ⑵ 回调方法 Laravel 的 console 命令行极大的方便了 PHP 定时任务的设置以及运行.以往通过 crontab 配置定时任务过程相对比较繁琐,并且通过 crontab 设置的定时任务很难防止任务的交叠运行. 所谓任务的交叠运行,是指由于定时任务运行时间较长,在 c

随机推荐