void类型是所有数据类型中最容易解释的。基本上,void的意思是“无类型”!
void是我们遇到的第一个不完整类型。不完整类型是指已经被声明但尚未定义的类型。编译器知道这种类型的存在,但没有足够的信息来确定为该类型的对象分配多少内存。void是有意设计为不完整的,因为它代表没有类型,因此无法定义。
不完整类型不能被实例化:
void value; // 不行,变量不能用不完整类型void定义
void通常用在几种不同的上下文中。
不返回值的函数
最常见的是,void用于表示一个函数不返回值:
void writeValue(int x) // 这里的void表示没有返回值
{
std::cout << "The value of x is: " << x << '\n';
// 没有返回语句,因为这个函数不返回值
}
如果你试图在这样的函数中使用返回语句返回一个值,会导致编译错误:
void noReturn(int x) // 这里的void表示没有返回值
{
std::cout << "The value of x is: " << x << '\n';
return 5; // 错误
}
在Visual Studio 2017中,这产生了以下错误:
error C2562: 'noReturn': 'void' function returning a value
过时用法:不接受参数的函数
在C语言中,void用于表示一个函数不接受任何参数:
int getValue(void) // 这里的void表示没有参数
{
int x{};
std::cin >> x;
return x;
}
尽管出于向后兼容的原因,这在C++中可以编译,但这种使用void的方式在C++中被认为是过时的。以下代码是等效的,并且在C++中更受推荐:
int getValue() // 空函数参数列表隐式表示void
{
int x{};
std::cin >> x;
return x;
}
最佳实践
使用空参数列表而不是void来表示函数没有参数。
void的其他用途
在C++中,void关键字还有第三个(更高级的)用途,我们在第19.5节——void指针中会讲到。因为我们还没有讲什么是指针,所以你现在不需要担心这种情况。
让我们继续!