C Primer Plus 第八章 函式探幽

2021-08-27 18:55:17 字數 2623 閱讀 4517

什麼時候建立臨時變數

如果引用引數是const,(如:func(const double &ra))則編譯器將在下面兩種情況下生產臨時變數:

1. 實參的型別正確,但不是左值。(如:7.0、temp+7等)

2. 實參的型別不正確,但可以轉換為正確的型別。(如:int,long等)

右值引用

c++11新增了另一種引用——右值引用。這種引用可以指向右值,是使用&&宣告的:

double && rref = sqrt(36.0);

double && jref = 2.0*j + 18.5;

返回引用
double m = sqrt(16.0);

cout

<< sqrt(25.0);

第一條語句中,值4.0被複製到乙個臨時位置,然後被複製給m。

第二條語句中,值5.0被複製到乙個臨時位置,然後被傳遞給cout。

若返回引用,則直接把值複製到m中,更加高效。

c風格字串作string物件引用引數

string

version(const

string& s1, const

string& s2) //函式宣告

string input = "absc";

version(input, "***"); //呼叫

何時使用引用引數

程式設計師能夠修改呼叫函式中的資料物件。

當資料物件太大時,提高程式的執行速度。

陣列等

//函式原型

char * left(const

char* str, int n=1);

//函式定義

char * left(const

char* str, int n)

函式特徵標

過載引用引數

void func(double &r1);

void func(const

double &r2);

void func(double && r3);

double x = 55.5;

const

double y = 12.2;

func(x); //呼叫void func(double &r1);

func(y); //呼叫void func(const double &r2);

func(x+y); //呼叫void func(double && r3);

若沒有void func(double && r3);那麼func(x+y)將會呼叫void func(const double &r2);

c++如何跟蹤每乙個過載函式

long func(int,float);

//內部表示來描述該介面

?func@@yaxh

對原始名稱進行的表面看來無意義的修飾將對引數數目和型別進行編碼。新增的一組符號隨函式特徵標而異,而修飾時使用的約定隨編譯器而異。

templatet>

void swap(t &a, t &b)

顯示具體化
//模板函式

template

void swap(t&, t&){}

//顯示具體化函式

template

<> void swap(job&, job&){}

區別例項化和具體化
template t>

void swap(t&, t&);

template <> void swap(job&, job&) //顯示具體化

int main()

過載解析

決定函式呼叫哪個函式定義,尤其是有多個引數時,稱為過載解析。

從最佳到最差的順序如下:

1. 完全匹配:常規函式優先於模板。

2. 提公升轉換:(例如char和shorts自動轉換成為int, float自動轉換為double)

3. 標準轉換:(例如int轉換成為char,long 轉換為double)

4. 使用者定義轉換。如類宣告中定義的轉換。

template

void recycle(type t);

//template

void recycle(type* t);

//int bolt = 12;

recycle(&bolt); //雖然兩個模板都可以,但將呼叫第二個模板,因為更具體。

模板函式的發展
template void ft(t1 x, t2 y)

int x;

decltype(x) y; //make y the same type as x

//解決問題

decltype(x+y) xpy;

xpy = x + y;

//合二為一

decltype(x+y) xpt = x + y;s

auto res =x + y;

c primer Plus第八章筆記

該書應從8章之後開始學習 現在開始第8章 p199 字元輸入輸出 緩衝區 是乙個存放內容的臨時儲存區域 為什麼要設定緩衝區 一 將若干個字元作為乙個塊進行傳輸比逐個傳送這些字元耗時少。二 如果輸入了乙個錯的字元,可以用鍵盤的更正功能進行修改。當按下回車鍵的時候就傳送輸入的字元。但是,互動性的程式需要...

C primer plus 第八章(一)

a int a 10 b int ob a c int p a d int function int const int 問 是引用?取位址?答 b表示引用,即 ob是a的別稱,從此ob與a就綁在一起同生同變,簡直就是乙個人 c中 表示取位址 d中函式原型中的形參也是 引用 注意第二形參的 cons...

C Primer Plus 隨記(第八章)

1.建立引用變數 int rat int roatents rat 此式中 不是位址運算子,而是型別表示符,roatents是rat的別名,他們指向相同的值和記憶體單元,改變 roatents的值,rat也會變。roatents是乙個引用變數 int prats rat prat是指標 roaten...