第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

你好,能幫我說(shuō)下為什么函數(shù)也可以做為類型嗎?

你好,能幫我說(shuō)下為什么函數(shù)也可以做為類型嗎?

C++ C
紫衣仙女 2022-05-14 15:11:40
class B {public:void f(){;}typedef void (B::*pf)();void f2(pf pf) {(this->*pf)();}void f3() {f2(f);}};這段代碼的意思幫我講一下,我看不懂.謝謝!
查看完整描述

2 回答

?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊

函數(shù)的類型是函數(shù)原型去除所有非類型標(biāo)識(shí)符。
例如原型為int foo(float f, double d);的函數(shù),它的類型是int(float, double)。(LS“函數(shù)不能作為類型”當(dāng)然正確,函數(shù)不是類型;不過(guò)恐怕理解有誤,函數(shù)還是有類型的。)
函數(shù)類型被用于聲明函數(shù),但不能定義函數(shù),因?yàn)楹瘮?shù)不是對(duì)象,C/C++不提供對(duì)于函數(shù)定義的初始化語(yǔ)法。
例如
int foo1(float f, double d);
int foo2(float f, double d);
int foo3(float f, double d);
可以簡(jiǎn)化為
typedef int footype(float, double);
footype foo1, foo2, foo3;
函數(shù)類型的主要應(yīng)用是用于模板類型參數(shù)。例如template<R(P1, P2)>,函數(shù)類型R(P1, P2)是這里的模板類型參數(shù)。boost等庫(kù)中有很多這類技巧。
上例中函數(shù)對(duì)應(yīng)的函數(shù)指針類型為int (*)(float, double);。指針是對(duì)象,它可以被定義并初始化。并且,它可以作為函數(shù)的參數(shù)和返回值(函數(shù)本身就不行)。C語(yǔ)言中利用函數(shù)指針是通用函數(shù)回調(diào)的唯一手段。
例如(續(xù)上例):
int (*p1)(float, double) = &foo1;//函數(shù)類型在這里可以退化為對(duì)應(yīng)函數(shù)指針類型,&可以省略。
footype* p2 = foo2;
int (*p3)(float, double) = NULL;
注意,這里要求源文件或庫(kù)中有foo1、foo2的定義,否則會(huì)鏈接失敗。定義時(shí)不能直接用footype,要老老實(shí)實(shí)寫(xiě)int foo1(float f, double d)之類作為函數(shù)頭。
調(diào)用時(shí),函數(shù)指針可以直接當(dāng)作函數(shù)名稱使用,例如p1(1.0f, 1.0d);。
此外,C++中還有函數(shù)引用。上例中對(duì)應(yīng)的類型是int(&)(float, double)。具體用法類似,參照對(duì)象引用和對(duì)象指針的區(qū)別。
對(duì)于成員函數(shù),有成員函數(shù)指針(但沒(méi)有成員函數(shù)引用)。和對(duì)象指針不同,成員指針的值的含義比較模糊,取決于實(shí)現(xiàn)(編譯器)。(題外話,對(duì)成員函數(shù)指針的sizeof結(jié)果也取決于實(shí)現(xiàn),對(duì)于虛繼承的成員函數(shù),有些編譯器中可達(dá)20。)一般來(lái)說(shuō),成員函數(shù)指針保存了成員在類定義中的偏移量信息。根據(jù)成員函數(shù)指針和對(duì)應(yīng)類的實(shí)例,可以利用二元操作符->*和.*(不能被重載)運(yùn)算符調(diào)用這個(gè)函數(shù),左操作數(shù)為指向?qū)ο蟮闹羔樆驅(qū)ο?,右操作?shù)為成員函數(shù)指針。
例如LZ的例子中,this->*pf,也可以用(*this).*pf來(lái)調(diào)用成員函數(shù)指針pf指向的成員函數(shù)。



查看完整回答
反對(duì) 回復(fù) 2022-05-16
?
三國(guó)紛爭(zhēng)

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊

typedef void (B::*pf)();
定義了一個(gè)指針,這個(gè)指針指向B中的一個(gè)函數(shù),此函數(shù)沒(méi)有參數(shù)也沒(méi)有返回值。這個(gè)指針是一個(gè)新類型,名字是pf,以后可以定義pf類型的變量。

void f(){;}
在類B中定義了一個(gè)函數(shù)f,無(wú)參數(shù)無(wú)返回值。

void f2(pf pf) {
(this->*pf)();
}
定義了函數(shù)f2,參數(shù)是pf類型的,無(wú)返回值。f2函數(shù)中,會(huì)將參數(shù)pf指向的函數(shù)執(zhí)行一次。

void f3() {
f2(f);
}
定義了函數(shù)f3.無(wú)參數(shù),無(wú)返回值。其中調(diào)用了f2函數(shù),參數(shù)是f。f代表函數(shù)f的地址。

==========補(bǔ)充============
函數(shù)本身是不可以做類型的,但是指向函數(shù)的指針是可以的。這里的pf實(shí)際上是一個(gè)指向函數(shù)的指針。



查看完整回答
反對(duì) 回復(fù) 2022-05-16
  • 2 回答
  • 0 關(guān)注
  • 202 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)