为postfix重载一元运算符

时间:2014-09-24 08:20:46

标签: c++

说我有一个班级

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)

对此问题的任何建议/意见?

3 个答案:

答案 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/一元运算符