定义后置版本的++/--需要的int 类型参数是编译器要求的
定义后置版本的++/--需要的int 类型参数是编译器要求的
garbageaa 发表于1年前
定义后置版本的++/--需要的int 类型参数是编译器要求的
  • 发表于 1年前
  • 阅读 8
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

看到定义后置版本++/--跟个(int)来区分,但是既没有默认实参,在调用时也不传递,也是可以的,于是看了下:


#include <iostream>

using namespace std;
class Operator {
public:
    Operator &operator++() {
        printf("pre increment\n");
        return *this;
    }

    Operator operator++(int){
        Operator op = *this;
        ++ *this;
        printf("post increment\n");
        return op;
    }
};

int main() {
    Operator op;
    ++ op;
    op ++;
    return 0;
}

上面代码OK,若将int类型改为其他的,如float类型,编译不能通过。


#include <iostream>

using namespace std;
class Operator {
public:
    Operator &operator++() {
        printf("pre increment\n");
        return *this;
    }

    //look at here
    Operator operator++(float){
        Operator op = *this;
        ++ *this;
        printf("post increment\n");
        return op;
    }
};

int main() {
    Operator op;
    ++ op;
    op ++;
    return 0;
}

gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) 下报:

error: postfix ‘Operator Operator::operator++(float)’ must take ‘int’ as its argument

20170417补充:

++/--前置型和后置型是重载的两个函数, 而函数重载是以函数参数区分的,对于++/--并没有参数,所以规定让后置型的++/--接收一个int型参数,来达到区别前置型和后置型的目的(因为没使用到参数,不给形参变量名防止warning)。

标签: C++
共有 人打赏支持
粉丝 2
博文 14
码字总数 4973
×
garbageaa
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: