cout的引數輸出順序問題

2022-04-01 23:21:28 字數 614 閱讀 2461

今天去參加人人網筆試,遇到這樣乙個題目:

問下面**的輸出是什麼?

[cpp]view plain

copy

#include 

using

namespace

std;  

intg = 0;  

template

<

typename

t>  

intfoo()  

intmain()  

乍一看,覺得這個題目沒那麼簡單,但是又想不出到底輸出什麼,就只好填了1234,其實這個結果是錯的。

回來在vc上執行了下,果然不是1234,而是4321。百思不得其解,後來在網上搜了下,發現cout的輸出順序有如下規律:

計算順序:自右至左

輸出順序:自左至右

也就是說cout在計算的時候是先計算foo()的值為1,再計算foo()的值為2,。。。所以輸出是4321。

後來用c的printf測了一下,也是輸出4321。

為什麼cout和printf會以這樣的方式執行的?

很多的編譯器在函式呼叫的時候,會在記憶體中分配乙個函式呼叫棧,函式的引數總是從右往左的順序計算並進棧。

C 輸出流cout的執行順序問題

首先看乙個例子 int fun1 int fun2 int main 輸出結果是 num2 num1 1 2 為什麼呢?為什麼不是num11num22呢?這裡涉及到cout輸出流的執行順序問題。cout的輸出順序有如下規律 計算順序 自右至左 輸出順序 自左至右 cout作為輸出流,有乙個緩衝區,先...

關於C 輸出流cout的執行順序問題

首先看乙個例子 int fun1 int fun2 int main 輸出結果是 num2 num1 1 2 為什麼呢?為什麼不是num11num22呢?這裡涉及到cout輸出流的執行順序問題。cout的輸出順序有如下規律 計算順序 自右至左 輸出順序 自左至右 cout作為輸出流,有乙個緩衝區,先...

C 中cout流的輸出順序

先來看一段 includeusing namespace std int hello1 int hello2 int main int hello1 int hello2 我第一次看到這段 認為輸出的順序就是 a hello1 b hello2 但是真正的執行結果呢,我們來看看 hello2 hel...