書名: 高質量程序設計指南:C++/C語言作者名: 林銳 韓永泉編著本章字數: 862字更新時間: 2019-01-09 14:09:00
4.6 運算符
C++/C基本上有3種運算符:算術運算符、關系運算符和邏輯運算符,還有一些其他運算符,如函數調用、類型轉換、成員選擇等。C++新提供了幾個類型轉換運算符和運行時類型識別運算符(typeid),以及作用域解析(::)、動態內存分配和釋放、類成員指針等運算符,我們在后面“C++運算符重載”中再介紹。運算符用來構成表達式并指示計算機執行計算,其基本特性就是優先級和結合律。在沒有使用小括號確定一個復合表達式中各運算符的計算順序的情況下,編譯器將使用它們的優先級和結合律來確定計算順序。優先級越高的運算符越先計算,相反,優先級越低的越后計算;相同優先級的運算符之間或同一運算符之間的計算順序按照結合律來確定。
運算符和表達式都是屬于C++/C程序的基本組成元素,它們看似簡單,但使用時隱患還是比較多的。
常見運算符的優先級與結合律見表4-2。注意一元運算符+、-、*的優先級高于對應的二元運算符。
表4-2 運算符優先級和結合律

由于將上表熟記是比較困難的,為了防止產生歧義并提高可讀性,應當用括號確定表達式的操作順序。例如:
word = (high << 8) | low if ((a | b) && (a & c))
【提示4-11】: 如果代碼行中的運算符比較多,用括號確定表達式中每一個子表達式的計算順序,避免使用默認的優先級。
條件運算符“? :”是C++/C中唯一的三元運算符,其語法為:
條件表達式?表達式1:表達式2;
其語義是:如果“條件表達式”為true,則整個表達式的值就是“表達式1”的值,“表達式2”忽略;否則整個表達式的值就是“表達式2”的值,“表達式1”忽略。它的語義等價于如下的if/else結構:
ResultType retValue; if (條件表達式) { retValue= 表達式1; }else { retValue= 表達式2; }
【提示4-12】: 當單獨對一個變量使用++、--運算符時,它們的前置版本和后置版本效果一樣。只有當變量用在較復雜的表達式中時,它們的前置版本和后置版本才具有不同的效果。在后面的“C++運算符重載”中我們再詳細討論它們的前置版本和后置版本的語義和區別。
當心那些視覺上不易分辨的操作符,以免發生書寫錯誤。我們經常會把“==”誤寫成“=”,像“||”、“&&”、“<=”、“>=”這類符號也很容易發生“丟1”失誤,然而編譯器卻不一定能自動指出這類錯誤。
- HBase從入門到實戰
- Internet of Things with Intel Galileo
- STM32F0實戰:基于HAL庫開發
- Learn React with TypeScript 3
- HTML5入門經典
- Getting Started with Greenplum for Big Data Analytics
- The DevOps 2.5 Toolkit
- Learning Unreal Engine Android Game Development
- AutoCAD 2009實訓指導
- ExtJS Web應用程序開發指南第2版
- Delphi開發典型模塊大全(修訂版)
- Puppet:Mastering Infrastructure Automation
- C語言程序設計與應用實驗指導書(第2版)
- C語言程序設計教程
- Flink入門與實戰