閱讀553 返回首頁    go 阿裏雲 go 技術社區[雲棲]


C++編程規範之30:避免重載&&,||或,(逗號)

摘要:

    明智就是知道合適適可而止:內置的&&,||和,(逗號)得到了編譯器的特殊照顧。如果重載它們,它們就會變成普通函數,具有完全不同的語義(這將違反地26條:保持重載操作符的自然語義和第31條:不要編寫依賴函數參數求值順序的代碼),這肯定會引入微妙的錯誤和缺陷。不要輕率地重載這些操作符。

    不能重載operator&&、operator||或者operator,的主要原因是,無法在三種情況下實現內置操作符的完整語義,而程序員通常都會需要這些語義。說的更具體一些,就是內置版本的特殊之處在於它是從左到右求職,而且&&和||還使用短路求值。

    內置版本的&&和||首先計算左邊表達式的值,如果這個值能夠決定結果,就不會計算第二個表達式的值,但是如果重載&&和||,這些函數在調用在執行執行總是對所有的參數進行求值,同時函數參數的求值順序是不確定的。

    逗號操作符也存在同樣的脆弱性。與&&和||一樣,內置逗號保證其表達式是從左到右按順序求值的。用戶自定義的逗號操作符無法保證是從左到右求值。

最後更新:2017-04-03 12:53:54

  上一篇:go 在U-boot中添加以太網驅動
  下一篇:go SVN報錯:could not connect to server