今天去參加人人網筆試,遇到這樣乙個題目:
問下面**的輸出是什麼?
[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...