C 重要知識點

2021-10-02 23:08:21 字數 1094 閱讀 8442

參考從4行**看右值引用

什麼叫左值,什麼叫右值?

可以對表示式取位址的是左值,不能對表示式取位址的是右值。

例如:int a = 1;

這裡a是變數,在棧中為其分配了具體的位址,是左值。1是右值。

例如:int a = std::max(1, 3);

max方法的返回值是右值,在賦值給a後會被銷毀,因此是右值。

什麼是右值引用?

int& a = std::max(1, 3);//error.左值引用不能繫結右值。

int&& a = std::max(1, 3);//correct. 右值引用可以繫結右值。

通過右值引用的宣告,右值不會被立刻銷毀,其生命週期與右值引用相同。

const int& a = std::max(1, 3);同樣可以做到這一點。

右值引用有什麼用?

(1)減少拷貝構造

class a 

a geta()

int main()

(2) 避免不必要的深拷貝。

(3) 完美**。形參會改變右值的型別,用右值引用可實現完美**。

在c++中,隨時要注意物件的拷貝

例如

vectorv = ;

for(auto s: v)

capture list:捕獲外部變數列表,宣告作用域內哪些變數可以在表示式中使用。

params list:引數列表。

mutable:指示符,用來說明是否可以修改捕獲的變數。

exception:異常。

return type:返回值。

function body:方法體。

例子:int a = 123;

auto f = [a] ; //捕獲外部變數

int a = 123;

auto f = (int a)-> int (a);//傳引數

二者都是替物件取別名。

#define在預編譯階段處理,c中定義的語法。簡單而機械的替換,沒有型別檢查。

typedef是關鍵字,在編譯階段被處理,有型別檢查功能。在自己定義的作用域內生效。但是函式裡面不能定義typedef

C語言的重要知識點

一 陣列與指標 1 陣列名就是陣列的首位址,一維陣列中 nums nums 0 二維陣列中 nums nums 0 0 2 一維陣列中 nums i nums i 二維陣列中可以模擬,即把 nums i j 中的nums i 看作陣列名,所以二維陣列中的 nums i j nums i j 並最終表...

JSP重要知識點

場合 頁面本身有中文的時候 解決辦法 servlet resp.setcontenttype text html charset gbk jsp page contenttype text html charset gb2312 注意 一定要寫在printwriter out resp.getwri...

JDBC重要知識點

1.cachedrowset 可以快取查詢到的結果集,即使你關閉流資源,依然可以使用結果集,還可以實現分頁功能 public cachedrowset pagequery string sql,int pagesize,int page throws exception 呼叫分頁結果 cachedr...