前置和后置++的区别

定义

++a表示取a的地址,增加它的内容,然后把值放在寄存器中;

a++表示取a的地址,把它的值装入寄存器,然后增加内存中的a的值;

效率

迭代器和其他模板对象使用前缀形式 (++i) 的自增, 自减运算符,因为前置自增 (++i) 通常要比后置自增 (i++) 效率更高。

类实现

Example& operator++() //前置++     
{     
    ++i;     
    return *this;     
}     
    
const Example operator++(int) //后置++     
{     
    Example temp = *this;     
    ++(*this);    
    return temp;//返回的是之前的值
}

前置++直接返回加 1 之后的原引用即可,而后置++要返回存储了之前的*this值的 const 类型。

const 理由

使(a++)++; 和a++ = 1; 等语句无法通过编译,因为它不是左值,和内置类型保持一致。但是考虑++(++a); 因为前置返回引用所以可行,与内置类型一致。

为什么要有一个int?

实际上int只起到占位作用,防止函数形参和前置++完全一样。换成double行不行呢?实验之后发现

BigInteger.cpp:49:39: error: parameter of overloaded post-increment operator must have type 'int' (not 'double')
const BigInteger operator ++ (double){
^
1 error generated.

不行!在语言规范制定之时就内定了只能由int来占这个位。

 

posted @ 2020-02-21 11:39  Playlist  阅读(212)  评论(0)    收藏  举报