官术网_书友最值得收藏!

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”失誤,然而編譯器卻不一定能自動指出這類錯誤。

主站蜘蛛池模板: 新余市| 织金县| 武强县| 霍林郭勒市| 铜鼓县| 七台河市| 色达县| 北流市| 油尖旺区| 牙克石市| 阳西县| 临夏县| 梁平县| 泉州市| 万源市| 平湖市| 无极县| 灵宝市| 墨竹工卡县| 伊金霍洛旗| 方山县| 海阳市| 慈利县| 大城县| 柯坪县| 沙坪坝区| 丽江市| 阳新县| 濉溪县| 仙游县| 鸡泽县| 万全县| 炉霍县| 崇阳县| 永宁县| 汉源县| 汽车| 察哈| 栖霞市| 临夏县| 梅河口市|