1. 程式人生 > >20.C++- &&,||邏輯重載操作符的缺陷、,逗號重載操作符的分析

20.C++- &&,||邏輯重載操作符的缺陷、,逗號重載操作符的分析

targe 參數 life span http () www 技術 使用

大家,都知道"&&","||"擁有"短路"功能

  • 比如a=(0&&b) : 由於第一個操作數為0,所以不會去判斷b的內容,直接執行a=0
  • 比如a=(-100||b): 由於-100不為0,所以不會去判斷b的內容,直接執行a=1

可以參考下面代碼:

運行打印:

並沒有調用func(100)函數,同樣"||"邏輯操作符也具有擁有"短路"功能

||"就不會具備"短路"功能

參考以下示例:

打印:

從結果看出,調用了func(t0)和func(t1),並且調用順序是從右往左的.

這是因為執行func(t0)&&func(t1)時:

編譯器實際是執行的operator && (func(t0), func(t1))

函數,所以需要進入func()初始化兩個參數

然後通過下面代碼, 發現參數初始化順序是從右往左的:

運行打印:

技術分享圖片

首先回顧下編譯器自帶的","逗號操作符

  • 逗號表達式前N-1子表達式不需要返回值
  • 逗號表達式從左往右計算,且最終的值等於最後一個表達式的值

比如:

  • 逗號表達式,通過()圓括號來表示

比如:

編譯器實際是執行的operator , (t1+1, t2+2)重載操作符函數.

由於初始化參數的順序是從右往左初始化的,所以執行順序變反了,先執行t2+2.

總結:

其實使用編譯器自帶的","逗號操作符,用在對象上也能成功,因為","主要就是用來隔離代碼運行,並返回最後一個參數的值.不會參與對象的運算

.

所以在以後的開發中,不要重載","逗號操作符


文章來源:https://www.cnblogs.com/lifexy/p/8660910.html

20.C++- &&,||邏輯重載操作符的缺陷、,逗號重載操作符的分析