C 面試用題(二)const和Lambda表示式

2021-10-08 16:54:08 字數 2519 閱讀 4252

const在c++中用來修飾內建型別變數,自定義物件,成員函式,返回值,函式引數。

一、修飾普通型別變數

const

int a =7;

int b=a;a=8

;//不被允許

最後a仍然是8,在加上了const關鍵字後,a就被編譯器認為是乙個常量,不允許修改。

如果非要改,可以在const前面再加上volatile關鍵字。

volatile

const

int a =9;

int*p =

(int*)

&a;*p =8;

cout << a << endl;

system

("pause");

return

0;

這樣a的值就變成了8,但是注意,直接給a賦值還是不可以的,會有紅線。

二、修飾指標類變數

const修飾指標變數有以下三種情況:

a:const修飾指標指向的內容,內容為不可變的量。

b:修飾指標,指標為不可變的量。

c:const修飾指標和指標指向的內容,二者都為不可變的變數。

a:

int a=8;

const

int* p=

&a;//指標指向的內容,a的位址,不可被改變

b:

int a=8;

int*

const p=

&a;*p=9;

//這是允許的

int b=7;

//p=&b;這是不可以的

由於此處的const修飾的是p,而不是int* p,所以const對應不可以改變的值,不再是int* p這個指標內存放的內容,所以不可以改變的是位址。

c:都修飾

int a=8;

const

int*

const p =

&a;

這個時候無論是*p還是p,都無法做任何更改嘍。

三、const引數傳遞和函式返回值

const修飾函式引數也可以分為三種情況:

a:const修飾傳入引數:

int

test

(const

int a)

這種情況一般不需要用const修飾,因為如果不是以引用傳遞,函式會自動產生臨時變數複製實參的值。換句話說,只有傳入引數是引用的情況下,

b:const修飾指標引數,防止指標被篡改:

int

test

(int

*const a)

c:宣告類的成員函式為const。

void

test()

const

const型別的函式表明該函式不會修改物件的成員,同時該函式也不可以呼叫非const函式。例如:

string name=

"chujialu"

;string setname

(string& name)

void

test()

當寫乙個只會被使用一次的函式時,會用到匿名函式。

定義格式:

[捕獲列表](引數列表·)->返回值型別

呼叫:在定義之後直接呼叫:

int c=

(int a,

int b)

->

int(1,

2);//最後乙個括號是引數列表

等價於int

add(

int a,

int b)

int c=

add(a,b)

;

那如果我不想立刻使用這個函式,而是儲存一下以後再用呢?

auto f=

(int a,

int b)

->

int;

int c=f(

1,2)

;

兩個lambda表示式的巢狀

int c=

(int n)(1

);}(

2);

可以實現和上述相同的效果。函式巢狀函式,就稱之為函式式程式設計。有什麼好處呢?

在多執行緒,併發的環境中適用,因為它只依賴於內部。

高階可以參考:

這裡貼出部分回答:

:表示不捕獲任何外部變數

[=]:以傳值的方式捕獲外部的所有變數

[&]:以傳引用的方式捕獲外部的所有變數

[this]:捕獲外部的this指標

[=,&a]:以傳值的方式捕獲外部的所有變數,但是a變數以傳引用的方式捕獲

[a,b]:以傳值的方式捕獲外部變數a和b

[a,&b]:a以傳值方式捕獲,b以傳引用的方式捕獲

C 中委託和Lambda表示式

什麼是委託?簡單來說委託是乙個型別,這個型別可以賦值乙個方法的引用。delegate return type delegate name parameter type parameter name,1.delegate name delegate instance new delegate name...

C 匿名方法和Lambda表示式

有一次看見別人的 裡 以及花裡胡哨的省略寫法感覺好炫酷,就去整理了一下匿名方法和lambda表示式的寫法。1.無返回值型別actiontellname delegate string name 2.委託為方法引數時,省略構造委託例項listlistarray new list listarray.f...

C 匿名函式和Lambda表示式

一 匿名函式 匿名函式不等於匿名方法,匿名函式包含了匿名方法和lambda表示式這兩種概念。1 匿名方法 1 委託 委託是用於引用與其具有相同標籤的方法。即可以使用委託物件呼叫可由委託引用的方法。2 匿名方法 anonymous methods 提供了一種傳遞 塊作為委託引數的技術。匿名方法是沒有名...