亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

VC多線程編程詳解

 更新時(shí)間:2014年10月27日 09:58:31   投稿:shichen2014  
這篇文章主要介紹了VC多線程編程,實(shí)例形式詳細(xì)分析了多線程編程的原理與實(shí)現(xiàn)方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了VC多線程編程概念與技巧,分享給大家供大家參考。具體分析如下:

一、多線程編程要點(diǎn)

線程是進(jìn)程的一條執(zhí)行路徑,它包含獨(dú)立的堆棧和CPU寄存器狀態(tài),每個(gè)線程共享所有的進(jìn)程資源,包括打開(kāi)的文件、信號(hào)標(biāo)識(shí)及動(dòng)態(tài)分配的內(nèi)存等。一個(gè)進(jìn)程內(nèi)的所有線程使用同一個(gè)地址空間,而這些線程的執(zhí)行由系統(tǒng)調(diào)度程序控制,調(diào)度程序決定哪個(gè)線程可執(zhí)行以及什么時(shí)候執(zhí)行線程。線程有優(yōu)先級(jí)別,優(yōu)先權(quán)較低的線程必須等到優(yōu)先權(quán)較高的線程執(zhí)行完后再執(zhí)行。在多處理器的機(jī)器上,調(diào)度程序可將多個(gè)線程放到不同的處理器上去運(yùn)行,這樣可使處理器任務(wù)平衡,并提高系統(tǒng)的運(yùn)行效率。

Windows是一種多任務(wù)的操作系統(tǒng),在Windows的一個(gè)進(jìn)程內(nèi)包含一個(gè)或多個(gè)線程。32位Windows環(huán)境下的Win32 API提供了多線程應(yīng)用程序開(kāi)發(fā)所需要的接口函數(shù),而利用VC中提供的標(biāo)準(zhǔn)C庫(kù)也可以開(kāi)發(fā)多線程應(yīng)用程序,相應(yīng)的MFC類庫(kù)封裝了多線程編程的類,用戶在開(kāi)發(fā)時(shí)可根據(jù)應(yīng)用程序的需要和特點(diǎn)選擇相應(yīng)的工具。為了使大家能全面地了解Windows多線程編程技術(shù),本文將重點(diǎn)介紹Win32 API和MFC兩種方式下如何編制多線程程序。

多線程編程在Win32方式下和MFC類庫(kù)支持下的原理是一致的,進(jìn)程的主線程在任何需要的時(shí)候都可以創(chuàng)建新的線程。當(dāng)線程執(zhí)行完后,自動(dòng)終止線程; 當(dāng)進(jìn)程結(jié)束后,所有的線程都終止。所有活動(dòng)的線程共享進(jìn)程的資源,因此,在編程時(shí)需要考慮在多個(gè)線程訪問(wèn)同一資源時(shí)產(chǎn)生沖突的問(wèn)題。當(dāng)一個(gè)線程正在訪問(wèn)某進(jìn)程對(duì)象,而另一個(gè)線程要改變?cè)搶?duì)象,就可能會(huì)產(chǎn)生錯(cuò)誤的結(jié)果,編程時(shí)要解決這個(gè)沖突。

二、Win32 API下的多線程編程

Win32 API是Windows操作系統(tǒng)內(nèi)核與應(yīng)用程序之間的界面,它將內(nèi)核提供的功能進(jìn)行函數(shù)包裝,應(yīng)用程序通過(guò)調(diào)用相關(guān)函數(shù)而獲得相應(yīng)的系統(tǒng)功能。為了向應(yīng)用程序提供多線程功能,Win32 API函數(shù)集中提供了一些處理多線程程序的函數(shù)集。直接用Win32 API進(jìn)行程序設(shè)計(jì)具有很多優(yōu)點(diǎn): 基于Win32的應(yīng)用程序執(zhí)行代碼小,運(yùn)行效率高,但是它要求程序員編寫的代碼較多,且需要管理所有系統(tǒng)提供給程序的資源。用Win32 API直接編寫程序要求程序員對(duì)Windows系統(tǒng)內(nèi)核有一定的了解,會(huì)占用程序員很多時(shí)間對(duì)系統(tǒng)資源進(jìn)行管理,因而程序員的工作效率降低。

1. 用Win32函數(shù)創(chuàng)建和終止線程

Win32函數(shù)庫(kù)中提供了操作多線程的函數(shù),包括創(chuàng)建線程、終止線程、建立互斥區(qū)等。在應(yīng)用程序的主線程或者其他活動(dòng)線程中創(chuàng)建新的線程的函數(shù)如下:

復(fù)制代碼 代碼如下:
HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);

如果創(chuàng)建成功則返回線程的句柄,否則返回NULL。創(chuàng)建了新的線程后,該線程就開(kāi)始啟動(dòng)執(zhí)行了。但如果在dwCreationFlags中使用了CREATE_SUSPENDED特性,那么線程并不馬上執(zhí)行,而是先掛起,等到調(diào)用ResumeThread后才開(kāi)始啟動(dòng)線程,在這個(gè)過(guò)程中可以調(diào)用下面這個(gè)函數(shù)來(lái)設(shè)置線程的優(yōu)先權(quán):

復(fù)制代碼 代碼如下:
BOOL SetThreadPriority(HANDLE hThread,int nPriority);

當(dāng)調(diào)用線程的函數(shù)返回后,線程自動(dòng)終止。如果需要在線程的執(zhí)行過(guò)程中終止則可調(diào)用函數(shù):

復(fù)制代碼 代碼如下:
VOID ExitThread(DWORD dwExitCode);

如果在線程的外面終止線程,則可調(diào)用下面的函數(shù):

復(fù)制代碼 代碼如下:
BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode);

但應(yīng)注意: 該函數(shù)可能會(huì)引起系統(tǒng)不穩(wěn)定,而且線程所占用的資源也不釋放。因此,一般情況下,建議不要使用該函數(shù)。

如果要終止的線程是進(jìn)程內(nèi)的最后一個(gè)線程,則線程被終止后相應(yīng)的進(jìn)程也應(yīng)終止。

2. 線程的同步

在線程體內(nèi),如果該線程完全獨(dú)立,與其他線程沒(méi)有數(shù)據(jù)存取等資源操作上的沖突,則可按照通常單線程的方法進(jìn)行編程。但是,在多線程處理時(shí)情況常常不是這樣,線程之間經(jīng)常要同時(shí)訪問(wèn)一些資源。由于對(duì)共享資源進(jìn)行訪問(wèn)引起沖突是不可避免的,為了解決這種線程同步問(wèn)題,Win32 API提供了多種同步控制對(duì)象來(lái)幫助程序員解決共享資源訪問(wèn)沖突。在介紹這些同步對(duì)象之前先介紹一下等待函數(shù),因?yàn)樗锌刂茖?duì)象的訪問(wèn)控制都要用到這個(gè)函數(shù)。

Win32 API提供了一組能使線程阻塞其自身執(zhí)行的等待函數(shù)。這些函數(shù)在其參數(shù)中的一個(gè)或多個(gè)同步對(duì)象產(chǎn)生了信號(hào),或者超過(guò)規(guī)定的等待時(shí)間才會(huì)返回。在等待函數(shù)未返回時(shí),線程處于等待狀態(tài),此時(shí)線程只消耗很少的CPU時(shí)間。使用等待函數(shù)既可以保證線程的同步,又可以提高程序的運(yùn)行效率。最常用的等待函數(shù)是:

復(fù)制代碼 代碼如下:
DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds);

而函數(shù)WaitForMultipleObject可以用來(lái)同時(shí)監(jiān)測(cè)多個(gè)同步對(duì)象,該函數(shù)的聲明為:

復(fù)制代碼 代碼如下:
DWORD WaitForMultipleObject(DWORD nCount,CONST HANDLE *lpHandles,BOOL bWaitAll,DWORD dwMilliseconds);

(1)互斥體對(duì)象

Mutex對(duì)象的狀態(tài)在它不被任何線程擁有時(shí)才有信號(hào),而當(dāng)它被擁有時(shí)則無(wú)信號(hào)。Mutex對(duì)象很適合用來(lái)協(xié)調(diào)多個(gè)線程對(duì)共享資源的互斥訪問(wèn)??砂聪铝胁襟E使用該對(duì)象:

首先,建立互斥體對(duì)象,得到句柄:

復(fù)制代碼 代碼如下:
HANDLE CreateMutex();

然后,在線程可能產(chǎn)生沖突的區(qū)域前(即訪問(wèn)共享資源之前)調(diào)用WaitForSingleObject,將句柄傳給函數(shù),請(qǐng)求占用互斥對(duì)象:

復(fù)制代碼 代碼如下:
dwWaitResult = WaitForSingleObject(hMutex,5000L);

共享資源訪問(wèn)結(jié)束,釋放對(duì)互斥體對(duì)象的占用:

復(fù)制代碼 代碼如下:
ReleaseMutex(hMutex);

互斥體對(duì)象在同一時(shí)刻只能被一個(gè)線程占用,當(dāng)互斥體對(duì)象被一個(gè)線程占用時(shí),若有另一線程想占用它,則必須等到前一線程釋放后才能成功。

(2)信號(hào)對(duì)象

信號(hào)對(duì)象允許同時(shí)對(duì)多個(gè)線程共享資源進(jìn)行訪問(wèn),在創(chuàng)建對(duì)象時(shí)指定最大可同時(shí)訪問(wèn)的線程數(shù)。當(dāng)一個(gè)線程申請(qǐng)?jiān)L問(wèn)成功后,信號(hào)對(duì)象中的計(jì)數(shù)器減一,調(diào)用ReleaseSemaphore函數(shù)后,信號(hào)對(duì)象中的計(jì)數(shù)器加一。其中,計(jì)數(shù)器值大于或等于0,但小于或等于創(chuàng)建時(shí)指定的最大值。如果一個(gè)應(yīng)用在創(chuàng)建一個(gè)信號(hào)對(duì)象時(shí),將其計(jì)數(shù)器的初始值設(shè)為0,就阻塞了其他線程,保護(hù)了資源。等初始化完成后,調(diào)用ReleaseSemaphore函數(shù)將其計(jì)數(shù)器增加至最大值,則可進(jìn)行正常的存取訪問(wèn)??砂聪铝胁襟E使用該對(duì)象:

首先,創(chuàng)建信號(hào)對(duì)象:

復(fù)制代碼 代碼如下:
HANDLE CreateSemaphore();

或者打開(kāi)一個(gè)信號(hào)對(duì)象:

復(fù)制代碼 代碼如下:
HANDLE OpenSemaphore();

然后,在線程訪問(wèn)共享資源之前調(diào)用WaitForSingleObject。

共享資源訪問(wèn)完成后,應(yīng)釋放對(duì)信號(hào)對(duì)象的占用:

復(fù)制代碼 代碼如下:
ReleaseSemaphore();

(3)事件對(duì)象

事件對(duì)象(Event)是最簡(jiǎn)單的同步對(duì)象,它包括有信號(hào)和無(wú)信號(hào)兩種狀態(tài)。在線程訪問(wèn)某一資源之前,需要等待某一事件的發(fā)生,這時(shí)用事件對(duì)象最合適。例如:只有在通信端口緩沖區(qū)收到數(shù)據(jù)后,監(jiān)視線程才被激活。

事件對(duì)象是用CreateEvent函數(shù)建立的。該函數(shù)可以指定事件對(duì)象的類和事件的初始狀態(tài)。如果是手工重置事件,那么它總是保持有信號(hào)狀態(tài),直到用ResetEvent函數(shù)重置成無(wú)信號(hào)的事件。如果是自動(dòng)重置事件,那么它的狀態(tài)在單個(gè)等待線程釋放后會(huì)自動(dòng)變?yōu)闊o(wú)信號(hào)的。用SetEvent可以把事件對(duì)象設(shè)置成有信號(hào)狀態(tài)。在建立事件時(shí),可以為對(duì)象命名,這樣其他進(jìn)程中的線程可以用OpenEvent函數(shù)打開(kāi)指定名字的事件對(duì)象句柄。

(4)排斥區(qū)對(duì)象

在排斥區(qū)中異步執(zhí)行時(shí),它只能在同一進(jìn)程的線程之間共享資源處理。雖然此時(shí)上面介紹的幾種方法均可使用,但是,使用排斥區(qū)的方法則使同步管理的效率更高。

使用時(shí)先定義一個(gè)CRITICAL_SECTION結(jié)構(gòu)的排斥區(qū)對(duì)象,在進(jìn)程使用之前調(diào)用如下函數(shù)對(duì)對(duì)象進(jìn)行初始化:

復(fù)制代碼 代碼如下:
VOID InitializeCriticalSection(LPCRITICAL_SECTION);

當(dāng)一個(gè)線程使用排斥區(qū)時(shí),調(diào)用函數(shù):EnterCriticalSection或者TryEnterCriticalSection;

當(dāng)要求占用、退出排斥區(qū)時(shí),調(diào)用函數(shù)LeaveCriticalSection,釋放對(duì)排斥區(qū)對(duì)象的占用,供其他線程使用。

三、基于MFC的多線程編程

MFC是微軟的VC開(kāi)發(fā)集成環(huán)境中提供給程序員的基礎(chǔ)函數(shù)庫(kù),它用類庫(kù)的方式將Win32 API進(jìn)行封裝,以類的方式提供給開(kāi)發(fā)者。由于其快速、簡(jiǎn)捷、功能強(qiáng)大等特點(diǎn)深受廣大開(kāi)發(fā)者喜愛(ài)。因此,建議使用MFC類庫(kù)進(jìn)行應(yīng)用程序的開(kāi)發(fā)。

在VC++附帶的MFC類庫(kù)中,提供了對(duì)多線程編程的支持,基本原理與基于Win32 API的設(shè)計(jì)一致,但由于MFC對(duì)同步對(duì)象做了封裝,因此實(shí)現(xiàn)起來(lái)更加方便,避免了對(duì)象句柄管理上的煩瑣工作。

在MFC中,線程分為兩種:工作線程和用戶接口線程。工作線程與前面所述的線程一致,用戶接口線程是一種能夠接收用戶的輸入、處理事件和消息的線程。

1. 工作線程

工作線程編程較為簡(jiǎn)單,設(shè)計(jì)思路與前面所講的基本一致: 一個(gè)基本函數(shù)代表了一個(gè)線程,創(chuàng)建并啟動(dòng)線程后,線程進(jìn)入運(yùn)行狀態(tài); 如果線程用到共享資源,則需要進(jìn)行資源同步處理。這種方式創(chuàng)建線程并啟動(dòng)線程時(shí)可調(diào)用函數(shù):

復(fù)制代碼 代碼如下:
CWinThread*AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority= THREAD_PRIORITY_NORMAL,
UINT nStackSize =0,
DWORD dwCreateFlags=0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);

參數(shù)pfnThreadProc是線程執(zhí)行體函數(shù),函數(shù)原形為: UINT ThreadFunction( LPVOID pParam)。

參數(shù)pParam是傳遞給執(zhí)行函數(shù)的參數(shù);

參數(shù)nPriority是線程執(zhí)行權(quán)限,可選值:

THREAD_PRIORITY_NORMAL、THREAD_PRIORITY_LOWEST、THREAD_PRIORITY_HIGHEST、THREAD_PRIORITY_IDLE。

參數(shù)dwCreateFlags是線程創(chuàng)建時(shí)的標(biāo)志,可取值CREATE_SUSPENDED,表示線程創(chuàng)建后處于掛起狀態(tài),調(diào)用ResumeThread函數(shù)后線程繼續(xù)運(yùn)行,或者取值“0”表示線程創(chuàng)建后處于運(yùn)行狀態(tài)。

返回值是CWinThread類對(duì)象指針,它的成員變量m_hThread為線程句柄,在Win32 API方式下對(duì)線程操作的函數(shù)參數(shù)都要求提供線程的句柄,所以當(dāng)線程創(chuàng)建后可以使用所有Win32 API函數(shù)對(duì)pWinThread->m_Thread線程進(jìn)行相關(guān)操作。

注意:如果在一個(gè)類對(duì)象中創(chuàng)建和啟動(dòng)線程時(shí),應(yīng)將線程函數(shù)定義成類外的全局函數(shù)。

2. 用戶接口線程

基于MFC的應(yīng)用程序有一個(gè)應(yīng)用對(duì)象,它是CWinApp派生類的對(duì)象,該對(duì)象代表了應(yīng)用進(jìn)程的主線程。當(dāng)線程執(zhí)行完并退出線程時(shí),由于進(jìn)程中沒(méi)有其他線程存在,進(jìn)程自動(dòng)結(jié)束。類CWinApp從CWinThread派生出來(lái),CWinThread是用戶接口線程的基本類。我們?cè)诰帉懹脩艚涌诰€程時(shí),需要從CWinThread派生我們自己的線程類,ClassWizard可以幫助我們完成這個(gè)工作。

先用ClassWizard派生一個(gè)新的類,設(shè)置基類為CwinThread。注意:類的DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE宏是必需的,因?yàn)閯?chuàng)建線程時(shí)需要?jiǎng)討B(tài)創(chuàng)建類的對(duì)象。根據(jù)需要可將初始化和結(jié)束代碼分別放在類的InitInstance和ExitInstance函數(shù)中。如果需要?jiǎng)?chuàng)建窗口,則可在InitInstance函數(shù)中完成。然后創(chuàng)建線程并啟動(dòng)線程??梢杂脙煞N方法來(lái)創(chuàng)建用戶接口線程,MFC提供了兩個(gè)版本的AfxBeginThread函數(shù),其中一個(gè)用于創(chuàng)建用戶接口線程。第二種方法分為兩步進(jìn)行:首先,調(diào)用線程類的構(gòu)造函數(shù)創(chuàng)建一個(gè)線程對(duì)象;其次,調(diào)用CWinThread::CreateThread函數(shù)來(lái)創(chuàng)建該線程。線程建立并啟動(dòng)后,在線程函數(shù)執(zhí)行過(guò)程中一直有效。如果是線程對(duì)象,則在對(duì)象刪除之前,先結(jié)束線程。CWinThread已經(jīng)為我們完成了線程結(jié)束的工作。

3. 線程同步

前面我們介紹了Win32 API提供的幾種有關(guān)線程同步的對(duì)象,在MFC類庫(kù)中對(duì)這幾個(gè)對(duì)象進(jìn)行了類封裝,它們有一個(gè)共同的基類CSyncObject,它們的對(duì)應(yīng)關(guān)系為: Semaphore對(duì)應(yīng)CSemaphore、Mutex對(duì)應(yīng)CMutex、Event對(duì)應(yīng)CEvent、CriticalSection對(duì)應(yīng)CCriticalSection。另外,MFC對(duì)兩個(gè)等待函數(shù)也進(jìn)行了封裝,即CSingleLock和CMultiLock。因四個(gè)對(duì)象用法相似,在這里就以CMutex為例進(jìn)行說(shuō)明:

創(chuàng)建一個(gè)CMutex對(duì)象:

復(fù)制代碼 代碼如下:
CMutex mutex(FALSE,NULL,NULL);

復(fù)制代碼 代碼如下:
CMutex mutex;

當(dāng)各線程要訪問(wèn)共享資源時(shí)使用下面代碼:

復(fù)制代碼 代碼如下:
CSingleLock sl(&mutex);

sl.Lock();

if(sl.IsLocked())

//對(duì)共享資源進(jìn)行操作...

sl.Unlock();

四、結(jié)束語(yǔ)

如果用戶的應(yīng)用程序需要多個(gè)任務(wù)同時(shí)進(jìn)行相應(yīng)的處理,則使用多線程是較理想的選擇。這里,提醒大家注意的是在多線程編程時(shí)要特別小心處理資源共享問(wèn)題以及多線程調(diào)試問(wèn)題。

希望本文所述對(duì)大家的VC程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C/C++內(nèi)存管理基礎(chǔ)與面試

    C/C++內(nèi)存管理基礎(chǔ)與面試

    本章主要介紹C語(yǔ)言與C++的內(nèi)存管理,以C++的內(nèi)存分布作為引入,介紹C++不同于C語(yǔ)言的內(nèi)存管理方式(new?delete對(duì)比?malloc?free),感興趣的朋友來(lái)看看吧
    2022-07-07
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之單鏈表

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之單鏈表

    單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲(chǔ)單元存放線性表中的數(shù)據(jù)元素。本文將為大家介紹C語(yǔ)言中單鏈表的基本概念與讀取數(shù)據(jù)元素,需要的可以參考一下
    2021-12-12
  • VC++ 字符串String MD5計(jì)算小工具 VS2008工程

    VC++ 字符串String MD5計(jì)算小工具 VS2008工程

    基于字符串加密的MD5算法,VS2008 VC++,多字節(jié)編譯工程。主要代碼如下,實(shí)現(xiàn)了ANSI字符串加密與Unicode字符串加密,需要的朋友可以參考下
    2017-07-07
  • C++ getline函數(shù)用法詳解

    C++ getline函數(shù)用法詳解

    這篇文章主要介紹了C++ getline函數(shù)用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C++實(shí)現(xiàn)圖書館系統(tǒng)

    C++實(shí)現(xiàn)圖書館系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)圖書館系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語(yǔ)言動(dòng)態(tài)內(nèi)存分配的詳解

    C語(yǔ)言動(dòng)態(tài)內(nèi)存分配的詳解

    這篇文章主要介紹了C語(yǔ)言動(dòng)態(tài)內(nèi)存分配的詳解的相關(guān)資料,這里提供了實(shí)現(xiàn)方法整理和出現(xiàn)錯(cuò)誤的解決辦法,需要的朋友可以參考下
    2017-07-07
  • C語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲的示例代碼

    C語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲的示例代碼

    猜數(shù)字小游戲是我們小時(shí)候喜歡我們一個(gè)經(jīng)典小游戲。本文將用C語(yǔ)言實(shí)現(xiàn)這一經(jīng)典游戲,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-08-08
  • C語(yǔ)言中sizeof()與strlen()的區(qū)別詳解

    C語(yǔ)言中sizeof()與strlen()的區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中sizeof()與strlen()區(qū)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • c++ vector 常用函數(shù)示例解析

    c++ vector 常用函數(shù)示例解析

    這篇文章主要介紹了c++ vector 常用函數(shù)示例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C++表達(dá)式求值詳解

    C++表達(dá)式求值詳解

    下面小編就為大家?guī)?lái)一篇淺談C++ 語(yǔ)言中的表達(dá)式求值。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-10-10

最新評(píng)論