PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 這時的cout<<裡,為什麼還可以印出1??
作者:
Zephyr750
(紅蓮西風750)
2017-09-25 18:48:00
開發平台(Platform): (Ex: Win10, Linux, ...)
windows
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
visual studio 2008
win32 console
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
none
問題(Question):
add one: 2
add one return : 2
i: 1 <
作者: dannypsnl (秦書)
2017-09-25 19:16:00
我猜啦,同一行決議順序沒有規定
作者: KKeiko
2017-09-25 19:17:00
https://msdn.microsoft.com/en-us/library/say26bbb.aspx
作者:
LPH66
(-6.2598534e+18f)
2017-09-25 19:18:00
一樓正解, 不過這在 C++17 將會改變, 會是預期的 2 了問題是在 << 運算子的左右兩邊沒說誰先做
https://wandbox.org/permlink/2cRJkP2imKVDTSys
C++17
作者:
jimfan
(jimfan)
2017-09-25 22:21:00
如果你知道編譯器會將 cout << a << b << c << endl; 擴張為一連串函數呼叫,就會明白原因將你的cout 簡化成 cout << addOne(i) << i; 的話,大概會被編譯成 <<( <<(cout, addOne(i)) , i);可見i初次被使用時,值未被addOne()變更這裏還牽涉函數堆疊、以值/位址傳入的概念,嘩,C++很深奧
作者:
LPH66
(-6.2598534e+18f)
2017-09-25 23:47:00
其實這裡有點微妙, pre-C++17 的話這是對的但 C++17 新增的規定有特別把 << >> 兩個運算子拉出來規定其運算元的執行順序, 所以不能單單展成函數呼叫(即使在新規定之下普通函數呼叫其參數執行順序依然未指定)
作者:
lovejomi
(JOMI)
2017-09-26 06:18:00
c++17自己overload有辦法寫出滿足規定的實作嗎
作者:
LPH66
(-6.2598534e+18f)
2017-09-26 08:44:00
唔嗯, 這跟你的實作相對無關, 而是在進你的函數之前計算參數的順序問題; pre-C++17 沒規定, C++17 定先左再右
繼續閱讀
Re: [問題] 菜鳥對跨作業系統編譯的疑問
descent
[問題] 菜鳥對跨作業系統編譯的疑問
joylintp
Re: [閒聊] C++ Stateful Metaprogramming
damody
[問題] Call child class function from parent
gigigigi
Re: [閒聊] C++ Stateful Metaprogramming
CoNsTaR
[問題] c++ template undefined reference
yshihyu
[問題] 新手發問 do...while 要結束時請輸入0
Eric2213
[問題] 每個task有自己的stack?
zzss2003
[問題] cuda 環境設定與使用問題
hardman1110
[問題] 請問這行組語是哪個指令集?
zzss2003
Links
booklink
Contact Us: admin [ a t ] ucptt.com