如圖所示函式,為什么執行函式A(a)后,如果用cout連起來輸出,a的值就不變,分開輸出,a的值才能變?謝謝大家!

uj5u.com熱心網友回復:
右往左 消。。uj5u.com熱心網友回復:
執行的時候 右往做,輸出的時候就是左→右uj5u.com熱心網友回復:
一般是從右往左,但最好不要再一個運算式中多次處理一個變數uj5u.com熱心網友回復:
這是運算式求值順序的問題,不存在“一般是從右往左”的說法,這在C++規范中有詳細的說明,所以第一張圖的cout...的行為是未定義的。
樓主,求值順序規則蠻多的,簡單的講,如要在一個運算式(準確的講是在同一個求值點)中多次修改同一變數,則需要分開寫。
uj5u.com熱心網友回復:
嗯嗯,記下了



uj5u.com熱心網友回復:
前面都說了解決就不獻丑,不過有個疑問,A那個函式的引數是啥意思,傳參再取址嘛?如果是傳a的地址應該是int* x A(&a)吧?uj5u.com熱心網友回復:
前面都說了解決就不獻丑,不過有個疑問,A那個函式的引數是啥意思,傳參再取址嘛?如果是傳a的地址應該是int* x A(&a)吧?
一. 值傳遞
1. 用值傳遞方式,實際上是把實參的內容復制到形參中,實參和形參是存放在兩個不同的記憶體空間中。在函式體內對形參的一切修改對實參都沒有影響;
2. 如果形參是類的物件,利用值傳遞的話每次都要呼叫類的建構式構造物件,效率比較低。
二. 指標傳遞(地址傳遞)
1. 當進行指標傳遞的時候,形參是指標變數,實參是一個變數的地址或者是指標變數,呼叫函式的時候,形參指向實參的地址;
2. 指標傳遞中,函式體內可以通過形參指標改變實參地址空間的內容。
三. 傳遞參考
1.參考實際上是某一個變數的別名,和這個變數具有相同的記憶體空間;
2. 實參把變數傳遞給形參參考,相當于形參是實參變數的別名,對形參的修改都是直接修改實參;
3. 在類的成員函式中經常用到類的參考物件作為形參,大大的提高代碼的效率。
uj5u.com熱心網友回復:
放心 很簡單的代碼錯 未定義行為 結果沒意義
uj5u.com熱心網友回復:
一般是從右往左,但最好不要再一個運算式中多次處理一個變數
這是運算式求值順序的問題,不存在“一般是從右往左”的說法,這在C++規范中有詳細的說明,所以第一張圖的cout...的行為是未定義的。
樓主,求值順序規則蠻多的,簡單的講,如要在一個運算式(準確的講是在同一個求值點)中多次修改同一變數,則需要分開寫。
嗯嗯,記下了
補充一下哈,C++標準更新很快啊~~,從C++ 17開始,第一種寫法是合法的,兩者結果是一樣的。


因為C++17中,規定了移位運算子的求值順序:運算式 E1<<E2 和 E1>>E2 中,E1 的每個值計算和副作用都按順序早于 E2 的每個值計算和副作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/100346.html
標籤:C語言
