为什么在指定重载类型的返回值时会出现编译错误?

时间:2012-09-27 16:29:27

标签: c++

据我所知,在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 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:7)

根据定义,operator int()会返回int。它将在上下文中调用,其中类型为A的对象需要转换为int。这与第一个代码片段截然不同,其中运算符为operator+();你可以定义它以返回你喜欢的任何东西。

答案 2 :(得分:5)

operator int()是从您的类型到int的隐式转化运算符。所以它不能有任何返回类型,除了由运算符名称定义的int

答案 3 :(得分:1)

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