比如:
a(){cout<<"book";}
和
a(void){cout<<"book";}
和
a(void *){......}
这三个函数有什么区别,不要长篇大论,但要讲清楚
void参数表示没有参数的意思,和()表示的意思是一样的
void * 表示有一个指针类型的参数,无论是什么类型的指针,只要是指针就可以追问
void * 表示有一个指针类型的参数,无论是什么类型的指针,只要是指针就可以追问
谢谢明白了,
温馨提示:答案为网友推荐,仅供参考
第1个回答 2011-09-13
void指的是空类型,void*就是空指针,意思是函数的参数为空,可以省略不写。
第2个回答 2015-09-27
void类型:
void类型其实是一种用于语法性的类型,而不是数据类型,主要用于作为函数的参数或返回值,或者定义void指针,表示一种未知类型。
作为函数参数与返回值:
void func( void );
void func( );
例如上面两例,其实两种声明方式是等效的,在C++中如果参数列表为空,默认的参数类型即为void,但建议没有参数时使用void以提高程序的可读性。
因为C++在定义函数时不允许返回值类型为空,在C++98之前,是允许定义函数时不定义返回值的,默认的返回值是int类型。其实默认int类型并不是好事,如果函数有返回值在函数返回时是需要消耗CPU传递返回值的,也或许也是C++98标准将默认返回值类型改为void的原因。
因为C++不允许默认返回值,所以当函数不需要返回值是,需要将返回值类型声明为int类型。当调用返回值类型为void类型的函数时,在工程上有很多实际代码在前面加上(void)类型转换,以提高代码的可读性。如调用上面定义的
func函数。
(void)func( );
从另一个角度讲,这样严谨的方式是可以提高软件的健壮性的,调用函数时可以明确地看出是没有返回值的,如果调用一个返回值不是int类型的函数时最好判断其返回值,以检查函数调用是否成功,如:
#include
char buff[5];
func( );
snprintf(buff, sizeof(buff), “%d”, “10240”);
显然这段代码是有问题的,当然func没有返回值,这样调用是没有问题,但snprintf的调用会有问题因为缓冲区有可能太小而不能容纳结果字符串,上面的代码就有这个问题。假设我们不知道snprintf有没有返回值,可能这个BUG我们不会发现,直到有一天出现了我们不期望的结果。如果我们严格要求调用每个函数时必须判断函数的返回值,按照以下面的代码编码,就不会出给我们的程序造成隐患。
#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");
}
void类型其实是一种用于语法性的类型,而不是数据类型,主要用于作为函数的参数或返回值,或者定义void指针,表示一种未知类型。
作为函数参数与返回值:
void func( void );
void func( );
例如上面两例,其实两种声明方式是等效的,在C++中如果参数列表为空,默认的参数类型即为void,但建议没有参数时使用void以提高程序的可读性。
因为C++在定义函数时不允许返回值类型为空,在C++98之前,是允许定义函数时不定义返回值的,默认的返回值是int类型。其实默认int类型并不是好事,如果函数有返回值在函数返回时是需要消耗CPU传递返回值的,也或许也是C++98标准将默认返回值类型改为void的原因。
因为C++不允许默认返回值,所以当函数不需要返回值是,需要将返回值类型声明为int类型。当调用返回值类型为void类型的函数时,在工程上有很多实际代码在前面加上(void)类型转换,以提高代码的可读性。如调用上面定义的
func函数。
(void)func( );
从另一个角度讲,这样严谨的方式是可以提高软件的健壮性的,调用函数时可以明确地看出是没有返回值的,如果调用一个返回值不是int类型的函数时最好判断其返回值,以检查函数调用是否成功,如:
#include
char buff[5];
func( );
snprintf(buff, sizeof(buff), “%d”, “10240”);
显然这段代码是有问题的,当然func没有返回值,这样调用是没有问题,但snprintf的调用会有问题因为缓冲区有可能太小而不能容纳结果字符串,上面的代码就有这个问题。假设我们不知道snprintf有没有返回值,可能这个BUG我们不会发现,直到有一天出现了我们不期望的结果。如果我们严格要求调用每个函数时必须判断函数的返回值,按照以下面的代码编码,就不会出给我们的程序造成隐患。
#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");
}