C++ cout执行顺序

C++ cout执行顺序

问题描述是这样的:如果在cout中调用函数,同时这个函数中包含输出语句,那么会先输出哪一句?

仔细一看,突然发现对C++的内容遗忘了,确实一下子看不出来输出的先后问题。

实现如下:

 1 int max(int x, int y)
 2
 3 {
 4
 5 int max=0;
 6
 7 max=(x>y)?x:y;
 8
 9 cout<<"2. max="<<max<<endl;
10
11 return max;
12
13 }
14
15 int main(int argc, char* argv[])
16
17 {
18
19 cout<<"1. max="<<max(6,8)<<endl;
20
21 return 0;
22
23 }

执行结果如图:

查询了资料后,得到结论,cout的结合方向为向左,即cout是从后向前执行,参数压栈的顺序是从右向左。这样endl会先调用,然后是max(6,8)和"1. max="

,其实这道题难度并不大,但是需要注意的一点就是结合方向。如果从实现角度来思考的话,我们也可以得到同样的答案,结合C++的内存模型以及C++传参的特点就可以更加让我们牢记这一点。

记录下来,留待后查,同时方便他人。

可以联系我进行交流。[email protected]

谢谢支持。

2016.3.25

19:29

时间: 2024-10-18 15:07:39

C++ cout执行顺序的相关文章

c++cout执行顺序之一个不容易注意到的一点

二话不说,先看一个例子 #include <iostream> using namespace std; int main() { int a[10]={1,12,34,56,78,89,90,8,9,0}; int *p=a; int *p2=a; cout<<++*p<<endl; cout<<*++p<<endl;//谁靠的近先执行谁 cout<<endl; cout<<++*p2<<" &qu

cout 计算顺序问题

cout输出流的执行顺序 下面是IBM的一道笔试题 #include <iostream> using namespace std; int fun( ) { cout << "f" ; return 1; } int main() { int i = 1; // cout << i++ << i++ << i++ << endl; cout << "m" << fun(

继承构造函数的执行顺序

转自:http://blog.csdn.net/daheiantian/article/details/6438782 Code: #include <iostream> using namespace std; class A { public: A() { cout<<"int A::A()"<<endl; } A(A &a) { cout<<"int A::A(A &a)"<<endl

C++中多重继承构造函数执行顺序

代码1: 1 #include <cstdio> 2 #include <iostream> 3 4 using namespace std; 5 6 class A{ 7 public: 8 A(){ 9 cout<<"A"<<endl; 10 } 11 }; 12 class B{ 13 public: 14 B(){ 15 cout<<"B"<<endl; 16 } 17 }; 18 cl

C++多重继承的构造执行顺序

一个类,它可能有基类,也可能存在多个基类,这些类里面还可能是虚拟基类,并且在类的本身也可能存在对象成员.那么所涉及的这些类或对象成员会以什么样的顺序来调用它们各自的构造函数呢?今天我们就来举例分析下. 执行以下程序: #include <iostream> using namespace std; class Base{ public: Base(){ cout << "The constructor of Base" << endl; } }; c

iOS程序执行顺序和UIViewController 的生命周期(整理)

说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序的启动执行顺序 程序启动顺序图 iOS启动原理图.png 具体执行流程 程序入口进入main函数,设置AppDelegate称为函数的代理 程序完成加载[AppDelegate application:didFinishLaunchingWithOptions:] 创建window窗口 程序被激活[

修饰符-包-内部类-代码块执行顺序

1.访问权限修饰符     从大到小的顺序为:public--protected--default--private     private--只能在同一类中使用;     default--不用写出来,默认不加.可以被同一包中的类使用     protected--可以被不同包的子类使用     public--可以被不同包的其它类使用 2.各种修饰符的修饰对象(可修饰哪些:类/接口/方法/属性)(多个修饰符连用是可以没有顺序的!)     1)访问权限修饰符:public/default--

NAT与ACL执行顺序解析

防火墙数据包处理流程图 ACL与NAT的顺序不是固定的,各厂商数据流先ACL或先NAT不一. 引用<浅析ACL与NAT的执行顺序>-张少芳  一文中的结论如下: H3C 出站:先匹配出站ACL,然后进行地址转换 入站:先进行地址转换,然后匹配入站ACL CISCO 出站:先进行地址转换,然后匹配出站ACL 入站:先匹配入站ACL,然后进行地址转换(即上图所示数据流顺序) 结论 H3C设备和CISCO设备在对ACL与NAT的执行顺序处理上完全相反.由于在实际的网络中可能存在来自不同厂商的设备,因

Java(静态)变量和(静态)代码块的执行顺序

本文讨论Java中(静态)变量.(静态)代码块的执行顺序 首先创建3个类: 1.Foo类,用于打印变量 public class Foo { public Foo(String word) { System.out.println(word); } } 2.Parent类 public class Parent { static Foo FOO = new Foo("Parent's static parameter"); Foo foo = new Foo("Parent'