亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

VC6中,為什么只有類中的static成員函數(shù),才可

系統(tǒng) 2449 0

VC6中,為什么只有類中的static成員函數(shù),才可以做為線程啟動函數(shù)(ThreadProc)?

類中的static成員函數(shù),存放在堆區(qū)吧?
類中的非靜態(tài)成員函數(shù),也存放在堆區(qū)吧?

如果是,那么為什么會出現(xiàn)如題的現(xiàn)象呢?

回復(fù)內(nèi)容
【an_bachelor】:
個人以為應(yīng)該都放在代碼段

【haoranisme】:
堆區(qū)就存在代碼段吧?

那么,為什么只有類中的static成員函數(shù),才可以做為線程啟動函數(shù)(ThreadProc)呢?

【laolaoliu2002】:
static是c++中很常用的修飾符,它被用來控制變量的存儲方式和可見性,下面我將從static修飾符的產(chǎn)生原因、作用談起,全面分析static修飾符的實質(zhì)。

static的兩大作用:

一、控制存儲方式:

  static被引入以告知編譯器,將變量存儲在程序的靜態(tài)存儲區(qū)而非棧上空間。

  1、引出原因:函數(shù)內(nèi)部定義的變量,在程序執(zhí)行到它的定義處時,編譯器為它在棧上分配空間,大家知道,函數(shù)在棧上分配的空間在此函數(shù)執(zhí)行結(jié)束時會釋放掉,這樣就產(chǎn)生了一個問題:如果想將函數(shù)中此變量的值保存至下一次調(diào)用時,如何實現(xiàn)?
最容易想到的方法是定義一個全局的變量,但定義為一個全局變量有許多缺點,最明顯的缺點是破壞了此變量的訪問范圍(使得在此函數(shù)中定義的變量,不僅僅受此函數(shù)控制)。

  2、解決方案:因此c++中引入了static,用它來修飾變量,它能夠指示編譯器將此變量在程序的靜態(tài)存儲區(qū)分配空間保存,這樣即實現(xiàn)了目的,又使得此變量的存取范圍不變。

二、控制可見性與連接類型:

  static還有一個作用,它會把變量的可見范圍限制在編譯單元中,使它成為一個內(nèi)部連接,這時,它的反義詞為”extern”.

  static作用分析總結(jié):static總是使得變量或?qū)ο蟮拇鎯π问阶兂伸o態(tài)存儲,連接方式變成內(nèi)部連接,對于局部變量(已經(jīng)是內(nèi)部連接了),它僅改變其存儲方式;對于全局變量(已經(jīng)是靜態(tài)存儲了),它僅改變其連接類型。

類中的static成員:

一、出現(xiàn)原因及作用:

  1、需要在一個類的各個對象間交互,即需要一個數(shù)據(jù)對象為整個類而非某個對象服務(wù)。

  2、同時又力求不破壞類的封裝性,即要求此成員隱藏在類的內(nèi)部,對外不可見。

  類的static成員滿足了上述的要求,因為它具有如下特征:有獨立的存儲區(qū),屬于整個類。

二、注意:

  1、對于靜態(tài)的數(shù)據(jù)成員,連接器會保證它擁有一個單一的外部定義。靜態(tài)數(shù)據(jù)成員按定義出現(xiàn)的先后順序依次初始化,注意靜態(tài)成員嵌套時,要保證所嵌套的成員已經(jīng)初始化了。消除時的順序是初始化的反順序。

  2、類的靜態(tài)成員函數(shù)是屬于整個類而非類的對象,所以它沒有this指針,這就導(dǎo)致了它僅能訪問類的靜態(tài)數(shù)據(jù)和靜態(tài)成員函數(shù)。


【laolaoliu2002】:
將成員函數(shù)聲明為靜態(tài)雖然可以解決作為線程函數(shù)的問題,但是它帶來了新的問題,那就是static成員函數(shù)只能訪問static成員。解決此問題的一種途徑是可以在調(diào)用類靜態(tài)成員函數(shù)(線程函數(shù))時將this指針作為參數(shù)傳入,并在改線程函數(shù)中用強(qiáng)制類型轉(zhuǎn)換將this轉(zhuǎn)換成指向該類的指針,通過該指針訪問非靜態(tài)成員。

【haoranisme】:
學(xué)習(xí)了,但還是想知道:

為什么只有類中的static成員函數(shù),才可以做為線程啟動函數(shù)(ThreadProc),
而類的非靜態(tài)成員函數(shù)不可以?



【gaooo】:
成員函數(shù)調(diào)用需this

【gaooo】:
非成員函數(shù)不需要this指針

【haoranisme】:
突然想到,會不會是為了區(qū)分代碼段和數(shù)據(jù)段呢?

【robinwjb】:
線程函數(shù)是獨立于類的實例而存在的,他的生命期不是類的生命期,而是整個process。
試想一下,如果可以用非靜態(tài)成員函數(shù)作為線程函數(shù),如果沒有定義一個這個類的實例,
豈不是無法調(diào)用線程函數(shù)了?


【haoranisme】:
試想一下,如果可以用非靜態(tài)成員函數(shù)作為線程函數(shù),如果沒有定義一個這個類的實例,
豈不是無法調(diào)用線程函數(shù)了?


++++++++++++++++++++++++++++++++++++++++++++++++++++
不明白呀!

【LiChenYue】:
學(xué)習(xí)!關(guān)注!

【robinwjb】:
試想一下,如果可以用非靜態(tài)成員函數(shù)作為線程函數(shù),如果沒有定義一個這個類的實例,
豈不是無法調(diào)用線程函數(shù)了?


++++++++++++++++++++++++++++++++++++++++++++++++++++
不明白呀!

------------------------------------------------------------
靜態(tài)成員(無論是函數(shù)還是變量)是存儲在全局變量區(qū)的,也就是在整個程序生命中有效的。
而非靜態(tài)成員是隨類的實例生成而生,隨著類的實例死亡而死的。
所以,如果非靜態(tài)成員函數(shù)作為線程函數(shù)的話,此時這個類的實例不存在,而程序要生成線程了,卻發(fā)現(xiàn)線程函數(shù)根本不存在。

【haoranisme】:
非靜態(tài)成員函數(shù),也存儲全局變量區(qū)(堆區(qū))吧?

【chehw】:
設(shè)某函數(shù)原型為LRESULTThreadProc(LPVOIDpv);

若為非靜態(tài)成員函數(shù),編譯時自動展開為ThreadProc(pClass->this,pv);與線程函數(shù)調(diào)用不相符。所以必須使用全局函數(shù)或類靜態(tài)成員函數(shù)

【haoranisme】:
會不會是為了區(qū)分代碼段和數(shù)據(jù)段呢?


【robinwjb】:
非靜態(tài)成員函數(shù),也存儲全局變量區(qū)(堆區(qū))吧?

------------------------------------------------

如果沒有類的實例,則非靜態(tài)成員函數(shù)沒有存儲空間。
只是作為代碼存在代碼區(qū)

【wltg2001】:
成員函數(shù)都有一個隱含參數(shù)this,也就是指向這個對象實例的指針,所以不能做啟動函數(shù)

【wltg2001】:
用成員函數(shù)作線程啟動函數(shù)編譯應(yīng)該都不會過,就是因為參數(shù)不匹配的原因

【haoranisme】:
感覺不象

【kouzhongling】:
設(shè)某函數(shù)原型為LRESULTThreadProc(LPVOIDpv);

若為非靜態(tài)成員函數(shù),編譯時自動展開為ThreadProc(pClass->this,pv);與線程函數(shù)調(diào)用不相符。所以必須使用全局函數(shù)或類靜態(tài)成員函數(shù)

---------------------------------------------
同意

作為線程入口當(dāng)然不應(yīng)該與類對象共存亡應(yīng)該具有全局性
俺認(rèn)為所有方法均在于代碼段至于堆中是否存有可執(zhí)行代碼我也想知道
我一直認(rèn)為堆只是存放數(shù)據(jù)的地方

【haoranisme】:
謝謝各位了!

【Nowish】:
mark~

VC6中,為什么只有類中的static成員函數(shù),才可以做為線程啟動函數(shù)(ThreadProc)?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 婷婷色六月 | se婷婷| 欧美日韩色综合网站 | 欧美综合亚洲图片综合区 | 日本黄色免费网址 | 国产精品深夜福利免费观看 | 香蕉网站在线 | 2046影院视频大全在线观看 | 四虎论坛 | 久久草在线观看视频 | 精品一区二区三区四区乱码90 | 成人国产在线观看 | 一区二区三区免费视频观看 | 久青草国产手机在线观 | 精品国产综合区久久久久久 | 一区二区三区亚洲视频 | 91免费福利视频 | 精品国产免费一区二区 | 国产精品久久久久久久久99热 | 四虎影院在线免费观看 | 久草久| 天天干天天干天天色 | 久久成人国产精品二三区 | 神马影院在线观看我不卡 | 久久久久日韩精品无 | 欧美亚洲三级 | 青青青视频在线 | 日韩经典欧美一区二区三区 | 亚洲综合图| 九九九九热精品视频 | 天天插天天操天天射 | 黄色资源在线观看 | 欧美精品亚洲二区 | 亚洲国产精品一区二区九九 | 伊人狠狠丁香婷婷综合色 | 激情五月婷婷色 | 欧美人交性视频在线香蕉 | 久青草视频免费视频播放线路1 | 99久久99这里只有免费的精品 | 久久亚洲精品tv | 亚洲免费观看视频 |