提问者:小点点

所有的C++运算符都返回一些东西吗?


我使用过的所有C++运算符都返回一些东西,例如+运算符返回加法的结果。

是所有的C++运算符都返回一些东西,还是有些C++运算符不返回任何东西?


共3个答案

匿名用户

deletedelete[]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;
}

运行此代码将打印3foo::operator+不返回任何内容。 这段代码可能不会通过代码审查,但是不从运算符返回一些东西并不罕见。

我所知道的唯一一个可以重载且要求返回某些内容的运算符是operator->。 它必须返回一个原始指针或一个具有运算符->的对象。

匿名用户

挑剔的是,操作员什么都不回。 它们只是我们用来在语言中创建表达式的词汇元素。 现在,表达式有类型,可能求值为值,我假设这就是您所说的运算符“返回东西”的意思。

而且,嗯,是的。 有一些类型为void的C++表达式(因此不计算任何值)。 有些是显而易见的,有些则不那么明显。 一个很好的例子是

throw std::runtime_error()

throw是C++语法下的表达式。 您可以在其他表达式中使用它,例如在条件表达式中

return goodStatus() ? getValue() : throw std::runtime_error();

和抛出表达式的类型为void。 显然,因为这只会导致执行迅速转移到其他地方,所以表达式没有值。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|运算符|返回|东西)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?