c primer讀書筆記 4 1 基礎

2021-07-15 20:01:09 字數 939 閱讀 4386

c++ 定義了多種運算子,其中包括一元運算子,二元運算子,三元運算子。作用於乙個運算物件的運算子即是一元運算子,作用於兩個運算物件的運算子即是二元運算子。要特別注意,函式呼叫也是一種特殊的運算子,它對運算物件的數量沒有限制。

要理解運算子,首先要理解運算子的優先順序結合律以及運算物件的求值順序

過載運算子時,必須要有乙個運算物件是自定義型別,而且過載運算子不會改變運算子的運算物件個數,運算子的優先順序和結合律。

左值和右值是乙個很難理解的概念。最初在c語言中,左值表示可以位於賦值語句左側的值,但右值則不能。在c++中,兩者的區別則沒有那麼簡單。可以做乙個簡單的歸納:當乙個物件被用作右值時,用的是物件的值(內容),當物件被用作左值的時候,用的是物件的身份(在記憶體中的位置)。當乙個表示式,可以對其取址時,它則可以作為乙個左值。

不同運算子對運算物件的要求各不相同,有的需要左值運算物件,有的需要右值運算物件。返回值也不相同,有的返回左值結果,有的返回右值結果。乙個重要的原則是:在需要右值的地方,可以使用左值來代替,但是不能把右值當做左值來使用。當乙個左值被當做右值使用時,實際使用的是它的內容。

略優先順序規定了運算物件的組合方式,但是沒有說明運算物件按照什麼順序求值,比如:

a =(expr1) + (expr2);
我們無法判斷是expr1表示式先求值還是expr2表示式先求值。所以這有時可能造成歧義,比如

int i= 0;

a = i + (++i); //若先計算左邊,a結果為1,若先計算右邊表示式,a結果為2

c++中有四種運算子明確規定了運算物件的求值順序 && 、|| 、(,)、(?:)。

由於過載操作符會使上述四種操作符失去運算物件的求值順序,所以通常不應該對上述四種操作符進行過載操作。

C primer 讀書筆記

第2 章 變數和基本型別 1 變數直接初始化和變數 複製初始化 int ival 1024 direct initialization int ival 1024 copy initialization 初始化不是賦值 2 內建型別復 制初始化和直接初始化幾乎沒有區別 但 對類型別物件來 說,有些初...

C Primer讀書筆記

前些日子開始看 c primer 順便做一些筆記,既有書上的,也有自己理解的。因為剛學c 不久,筆下難免有謬誤之處,行文更是凌亂 所幸不是用來顯配的東西,發在linuxsir只是為了方便自己閱讀記憶,以防只顧上網忘了正事。書看了不到一半,所以大約才寫了一半,慢慢補充。const要注意的問題 1 下面...

C Primer讀書筆記

前些日子開始看 c primer 順便做一些筆記,既有書上的,也有自己理解的。因為剛學c 不久,筆下難免有謬誤之處,行文更是凌亂 所幸不是用來顯配的東西,發在linuxsir只是為了方便自己閱讀記憶,以防只顧上網忘了正事。書看了不到一半,所以大約才寫了一半,慢慢補充。const要注意的問題 1 下面...