2 回答

TA貢獻(xiàn)1839條經(jīng)驗 獲得超15個贊
void類型:
void類型其實是一種用于語法性的類型,而不是數(shù)據(jù)類型,主要用于作為函數(shù)的參數(shù)或返回值,或者定義void指針,表示一種未知類型。
作為函數(shù)參數(shù)與返回值:
void func( void );
void func( );
例如上面兩例,其實兩種聲明方式是等效的,在C++中如果參數(shù)列表為空,默認(rèn)的參數(shù)類型即為void,但建議沒有參數(shù)時使用void以提高程序的可讀性。
因為C++在定義函數(shù)時不允許返回值類型為空,在C++98之前,是允許定義函數(shù)時不定義返回值的,默認(rèn)的返回值是int類型。其實默認(rèn)int類型并不是好事,如果函數(shù)有返回值在函數(shù)返回時是需要消耗CPU傳遞返回值的,也或許也是C++98標(biāo)準(zhǔn)將默認(rèn)返回值類型改為void的原因。
因為C++不允許默認(rèn)返回值,所以當(dāng)函數(shù)不需要返回值是,需要將返回值類型聲明為int類型。當(dāng)調(diào)用返回值類型為void類型的函數(shù)時,在工程上有很多實際代碼在前面加上(void)類型轉(zhuǎn)換,以提高代碼的可讀性。如調(diào)用上面定義的
func函數(shù)。
(void)func( );
從另一個角度講,這樣嚴(yán)謹(jǐn)?shù)姆绞绞强梢蕴岣哕浖慕研缘?,調(diào)用函數(shù)時可以明確地看出是沒有返回值的,如果調(diào)用一個返回值不是int類型的函數(shù)時最好判斷其返回值,以檢查函數(shù)調(diào)用是否成功,如:
#include
char buff[5];
func( );
snprintf(buff, sizeof(buff), “%d”, “10240”);
顯然這段代碼是有問題的,當(dāng)然func沒有返回值,這樣調(diào)用是沒有問題,但snprintf的調(diào)用會有問題因為緩沖區(qū)有可能太小而不能容納結(jié)果字符串,上面的代碼就有這個問題。假設(shè)我們不知道snprintf有沒有返回值,可能這個BUG我們不會發(fā)現(xiàn),直到有一天出現(xiàn)了我們不期望的結(jié)果。如果我們嚴(yán)格要求調(diào)用每個函數(shù)時必須判斷函數(shù)的返回值,按照以下面的代碼編碼,就不會出給我們的程序造成隱患。
#include
#include
char buff[5];
(void)func( );
if( sizeof(buff) <= snprintf(buff, sizeof(buff), "%d", 10240) ){
buff[sizeof(buff) - 1] = '/0';
throw std::overflow_error("buff overflow");
}

TA貢獻(xiàn)1831條經(jīng)驗 獲得超9個贊
void參數(shù)表示沒有參數(shù)的意思,和()表示的意思是一樣的
void * 表示有一個指針類型的參數(shù),無論是什么類型的指針,只要是指針就可以
- 2 回答
- 0 關(guān)注
- 1171 瀏覽
添加回答
舉報