1

我知道在 C++ 中,您可以像函数一样重载运算符。与 C++ 中的函数一样,您必须指定返回值:

struct A {

    int operator +();

};

在这里,我重载operator+了一个返回int. 但是我发现当我重载一个类型同时给它一个返回值时,我得到error: return type specified for 'operator int'.

struct A {

    void operator int() {} // error

};

但是,如果我拿走返回值,它就可以正常工作。

struct A {

    operator int() {} // pass

};

该错误是否意味着通过int在函数参数之前使用,我正在创建一个返回int. 或者这是一些错误?如果我希望函数不返回值怎么办?有人可以解释为什么我会收到这个错误吗?谢谢。

4

4 回答 4

8

根据定义,operator int()返回一个int. 它将在A需要将类型对象转换为int. 这与第一个代码片段完全不同,其中运算符是operator+(); 你可以定义它来返回几乎任何你喜欢的东西。

于 2012-09-27T16:31:44.607 回答
7

好吧,operator int是将您的 A 转换为 a 的运算符int,因此它已经定义了返回类型,并且通过编写void operator int您正在给它另一个返回类型!

于 2012-09-27T16:31:25.713 回答
5

operator int()是从您的类型到 的隐式转换运算符int。因此它不能有任何返回类型,除非int由操作员名称定义。

于 2012-09-27T16:32:49.537 回答
1

您将普通(一元和二元)运算符与类型转换运算符混淆了

于 2012-09-27T16:34:26.060 回答