说我有一个班级
class foo
{
public:
char* operator+ () //unary operator - prefix before instance
{
return "SomeChar";
}
};
现在我可以这样使用
foo d;
std::cout << +d; //unary operator used as prefix allowed
现在,如果我想使用一元运算符作为后缀,那么根据this页面
正如您在本例中所看到的,我们使用int作为伪参数 post-fix,当我们重新定义一元增量的函数时(++) 和减量( - )重载运算符。你必须记住那个int 不是一个整数,而只是一个伪参数。你可以把它看作一个 信号给编译器创建后修复符号 操作
我使用的是+而不是++,因为两者都是一元运算符
我可以做以下
class foo
{
public:
char* operator+ () //unary operator - prefix before instance
{
return "SomeChar";
}
//Added this for postfix unary operation
char* operator+ (int) //unary operator - postfix before instance
{
return "SomeChar";
}
};
但是这个(后缀)不起作用
foo d;
std::cout << (d+) ; //unary operator used as post fix ERROR (Expected an expression)
对此问题的任何建议/意见?
答案 0 :(得分:3)
+
不能是后缀运算符。只有++
和--
可以。
答案 1 :(得分:3)
C ++不允许您添加新运算符。您只能重载现有的。该语言中没有postfix +
运算符,因此您无法添加它。您可以重载前缀++
和后缀++
,因为它们都存在。
答案 2 :(得分:1)
没有postfix +运算符,这是用户定义的转换:
char* operator+ (int) //unary operator - postfix before instance
{
return "SomeChar";
}
“int
”参数不是偶然的,请尝试编写:
foo d;
std::cout << (d+3) ; // No longer an "expression required" error
推荐阅读是§5.3.1/一元运算符