簡體   English   中英

C ++中函數參數的順序

[英]Order of Function arguments in C++

我在閱讀“ Bjarne Stroustrup的C ++樣式和技術 ”常見問題時,他提到了該常見問題。i ++ + i ++的價值是什么?

在此他提到了“ ...函數參數的求值順序未定義。” 當他指的是f(v [i],i ++)時; 例。

我知道函數參數的求值順序是不確定的,不是不確定的,但是在這種情況下是不確定的,因為我們依賴於i的值來傳遞哪個v [i]或FAQ本身的錯誤?

未指定函數參數的求值順序,但表達式的行為未定義。 Bjarne剛剛弄錯了。 :-)

簽出線程以了解“未指定行為”和“未定義行為”之間的區別。

我曾經問過Bjarne, unspecifiedundefined之間的區別,這是他的答復。

就我個人而言,我不必理會“未定義”和“未指定”之間的區別; 你知道這是什么嗎? 無論哪種情況,都應刪除該代碼並進行射擊:(請小心避免使用“ undefined”和“ unspecified”一詞)

.....

您無需知道:只需避免兩者。 如果有人真的想知道他們可以在C ++或C標准中查找定義(我敢打賭,C和C ++標准將在不重要的細節上存在分歧)。

我認為我們在這里失去了語義。 規格是定義,可以直接定義,也可以省略。 留下了許多未指定的行為,以允許通過實現定義的行為進行優化,這導致未定義的行為,至少如果您將代碼移至不同的編譯器或硬件,則代碼將失去通用性,並且可能也失去了清晰度和簡潔性。 就像Brian Kernighan也說的那樣,試圖利用潛在的“副作用”技巧的代碼通常不是好的樣式。 但是很有趣的是,有人指出Bjarne Stroustrup是“錯誤”。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM