c c學習筆記 (6)

2021-06-28 17:08:59 字數 1934 閱讀 3832

關於運算子過載

不可過載的運算子  ::     .*    .    ?:   , &

賦值(=)下標([ ]) 呼叫(( ))成員訪問箭頭(-〉)運算子(相對的解引用 * 也應該是成員函式)必須是成員函式,復合賦值運算子一般來說也應該是成員。改變物件狀態的運算子如自增、自減、解引用等通常也應該是成員,對於這些成員運算子函式應該返回所屬類的乙個物件。

具有對稱性的運算子可能轉換任意一端的運算物件,通常為非成員函式。

輸入和輸出運算子必須是非成員函式

關於自增、自減運算子,前置無參,後置有乙個虛參

關於賦值運算子,可能存在安全風險,其處理方法如前所示,盡可能以swap函式來處理。

關於關係運算子一般成對出現。

解引用和箭頭運算子均無參。箭頭運算子永遠不能丟掉成員訪問這個基本含義,當過載時,可以改變的是箭頭從哪個物件當中獲取成員,其他使用者什麼也不能做。

函式呼叫運算子,這個特有名氣了,說說優點,可以像函式一樣工作。優點是可以有狀態。c++11新增的lambda變是以其實現的,但是乙個無名的類的函式物件。相應也不能儲存狀態。但優點是方便。

lambda

如前所說,其在編譯器中的底層實現依舊是乙個類函式。

lambda函式的標準形式: [capture](parameters) mutable  ->return-type

[capture] 捕捉列表,這在用法上,可以單獨捕捉某幾個引數,也可以通過[=]以值的方式捕捉所有的外部引數。可以捕捉值,也可能以引用的方式捕捉。另若按值傳遞,則其在定義函式的那一刻,值已傳入函式中,且不會改變的。即若在之後,即合改變了捕捉的外部變數,但前面已定義的lambda函式依舊會使用前值。若需要其跟隨外部變數一起變化,需要將其改為引用的傳值方式,

#include using namespace std;

int main() ;

auto g = [=]()->int;

auto l = [&]();

auto p=[&i,&j]();

cout << f()<<" "<

(parameters)引數列表,可省略。

mutable 預設情況下,lambda函式往往是乙個const函式,mutable可以取消其常量性,這在值傳入時有用。在引用傳入時,無此作用。--可省略#include using namespace std;

int main() ;

*/auto q = [i]()mutable;

}

-> return-type ,尾置返回型別,可省略

函式主體

c++11標準允許lambda向函式指標轉換,前提是函式指標沒有任何捕獲的變數,且函式指標所示的原型與lambda函式有相同的呼叫方法。當然,最徹底解決此問題的辦法還是標準庫中的function型別這樣的東西

最簡單的lambda函式,{};

型別轉換運算子

型別轉換為隱式執行,故無參,無返回型別。其指類可以轉為何種型別

在c++11中引進了顯示型別轉換,確保轉換按照使用者要求。即使用者定義類時可以以explicit 宣告,再以static_cast<>進行顯示轉換,

#include using namespace std;

struct s

};struct p

};int main()

}

所以在使用中一定要避免二義性的型別轉換

一是類a可以多種方法轉為類b,即b可以通過a的建構函式轉為a,也可以通過自己operator a()轉為a,這會造成二義性

避免轉換目標是內建算術型別的過載運算子。除了顯式地向bool型別的轉換之外,我們應盡量避免定義型別轉換函式並盡可能地限制使用。

不要再定義接受算術型別的過載運算子。

不要定義轉換到多種算術型別的型別轉換。

不要為類同時提供轉換目標是算術型別的型別轉換,也提供過載的運算子。

c c 學習筆記 6

今天主要學習到的是靜態變數 static 暫存器變數 register 初始化 遞迴 預處理器。比較容易混淆的是關於靜態變數的,而靜態變數分為 靜態區域性變數和靜態全域性變數。靜態區域性變數 1 靜態區域性變數在函式內定義 它的生存期為整個源程式,但是其作用域仍與自動變數相同,只能在定義該變數的函式...

C C 學習筆記 基礎知識6

1複雜表示式與序列點 序列點是乙個時間點 在整個表示式全部計算完畢之後或在 或逗號運算子處,或在函式呼叫之前 此刻塵埃落定,所有的 都已確保結束.ansi iso c 標準這樣描述 在上乙個和下乙個序列點之間,乙個物件所儲存的值至多只能被表示式的計算修改一次。而且前乙個值只能用於決定將要儲存的值。i...

C C 學習筆記6 const運用(1)

1 在說明const之前首先提出乙個問題 const有什麼用途?2005年某公司面試題 解析 在c程式中,const的用法主要有定義常量 修飾函式引數 修飾函式返回值 在c 程式中,它還可以修飾函式的定義體,定義類中某個函式為恆態函式,即不改變類中的資料成員。答案 1 可以定義常量 2 const可...