据我所知,在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
的函数。或者这是一个错误吗?如果我希望函数不返回值,该怎么办?有人可以解释为什么我收到此错误?感谢。
答案 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)
您将普通(一元和二元)运算符与类型转换运算符混淆