template<typename T> struct Incrementable { //Pre-increment Incrementable& operator++() { selfIncrement(); return *this; } //Post-increment Incrementable operator++(int) { Incrementable o = *this; selfIncrement(); return o; } private: void selfIncrement() { //TODO value increment //... } //Actual internal representation T value; };
int main() { int i = 0, j = ++i, k = i++; }
# rbp是栈底指针寄存器
# ecx/edx是通用寄存器
# i,j,k为整型变量,占4字节内存
# i的内存地址是(rbp-4)
# j的内存地址为(rbp-8)
# k的内存地址为(rbp-12)
# i初始化为0
movl $0, -4(%rbp)
# 将(rbp-4)的内存单元i的值存入ecx寄存器
movl -4(%rbp), %ecx
# ecx寄存器中存储的值递增1后存回ecx寄存器
addl $1, %ecx
# 把ecx寄存器中的值存入i对象的内存单元
movl %ecx, -4(%rbp)
# 把ecx寄存器中的值存入j对象的内存单元
movl %ecx, -8(%rbp)
# 将(rbp-4)的内存单元i的值存入ecx寄存器
movl -4(%rbp), %ecx
# 把ecx寄存器中的值存入edx寄存器
movl %ecx, %edx
# edx寄存器中存储的值递增1后存回edx寄存器
addl $1, %edx
# 把edx寄存器中的值存入i对象的内存单元
movl %edx, -4(%rbp)
# 把ecx寄存器中的值存入k对象的内存单元
movl %ecx, -12(%rbp)
# main函数的主调函数的栈底指针出栈
popq %rbp
# main函数返回
retq
error: expression is not assignable printf("%d\n", ++(a++)); ^ ~~~~~ 1 error generated.