但delete
和delete[]
C++的“关键字”实际上是运算符; 它们被定义为void
类型-这意味着它们的计算结果为nothing(而不是'something')。
来自CPPreference:
void运算符delete(void*ptr)noexcept;
void运算符delete[](void*ptr)noexcept;
可以重载自定义类型的运算符来做最奇怪的事情。
例如,+运算符返回加法的结果。
不一定:
#include <iostream>
struct foo {
void operator+(int x) {
std::cout << x;
}
};
int main () {
foo f;
f + 3;
}
运行此代码将打印3
。 foo::operator+
不返回任何内容。 这段代码可能不会通过代码审查,但是不从运算符返回一些东西并不罕见。
我所知道的唯一一个可以重载且要求返回某些内容的运算符是operator->
。 它必须返回一个原始指针或一个具有运算符->
的对象。
挑剔的是,操作员什么都不回。 它们只是我们用来在语言中创建表达式的词汇元素。 现在,表达式有类型,可能求值为值,我假设这就是您所说的运算符“返回东西”的意思。
而且,嗯,是的。 有一些类型为void
的C++表达式(因此不计算任何值)。 有些是显而易见的,有些则不那么明显。 一个很好的例子是
throw std::runtime_error()
throw
是C++语法下的表达式。 您可以在其他表达式中使用它,例如在条件表达式中
return goodStatus() ? getValue() : throw std::runtime_error();
和抛出表达式的类型为void
。 显然,因为这只会导致执行迅速转移到其他地方,所以表达式没有值。