c++中++运算符的实现

Implementation of ++ operator in c++

本文关键字:实现 运算符 c++      更新时间:2023-10-16

c++中如何定义标准++操作符?(c++ 11)

例如

int k, i=3;
k = i++;

首先将I赋值为3,然后使I递增。

有人能解释一下这是如何实现的吗?

还有,是否复制了该变量?

标准只定义了的作用,而没有定义如何实现

至于引号,你可以在c++标准§5.2.6[自增和自减]节中找到:

后缀的值表达式是其操作数的值。[注:得到的值是原始值的副本-end注]操作数必须为a修改的左值。操作数的类型应为算术类型或指向完整对象类型的指针。操作数的值对象通过向其添加1来修改,除非该对象的类型为Bool,在这种情况下,它被设置为true。[注:这种用法是已弃用,见附件D。的值的计算在修改操作数对象之前对c++表达式进行排序。对于不确定顺序的函数调用,后缀的操作++是一个单独的求值。[注:因此,函数调用不能介入左值到右值的转换和边值之间。与任何单个后缀++操作符关联的效果。-结束音符]The结果是一个右值。结果的类型为cv-不合格操作数类型的版本。

当你为你的类做一个重载时,你可以这样写:

T& T::operator++() // pre-increment, return *this by reference
{
  // increment something, somehow
  // maybe there is local int i and you will type 'i = i + 1;' or '++i;'
  // so whatever 'increment by one' means in your case.
  // for type 'int', this function would result in (an instruction | a series of instructions)
  // that increment the variable by one.
  return *this;
}
T T::operator++(int) // post-increment
{
  T copy(*this);
  ++(*this);// pre-increment here seems logical
  return copy;
}

可以看到,在实际数据递增之后创建并返回一个临时对象。因此,返回值是旧值,同时增加实际值。

对于内置类型,它使用相同的逻辑。如何做到这一点取决于实施操作的人,并且可以有所不同。但工作原理是一样的

post fix ++,在i++中,是这样的(在int的情况下):

int operator++(int i)
{
    int temp = i;
    i = i + 1;
    return temp;
}

前缀++,如在++i中是这样的(对于int):

int operator++()
{
    return i + 1;
}

你明白为什么前缀++和——被认为更有效了吧?

在C/c++语言中有前后递增。

摘自维基百科:

int  x;
int  y;
// Increment operators
x = 1;
y = ++x;    // x is now 2, y is also 2
y = x++;    // x is now 3, y is 2
// Decrement operators
x = 3;
y = x--;    // x is now 2, y is 3
y = --x;    // x is now 1, y is also 1

关于自增和自减运算符的更多信息

GCC内部解释:

计算单个操作数的值,并对操作数进行递增或递减操作。对于preprerement_expr和PREINCREMENT_EXPR,表达式的值是自增或自减后的值;在POSTDECREMENT_EXPR和POSTINCREMENT_EXPR的情况下,是递增或递减发生之前的值。操作数的类型与结果的类型一样,可以是整型、布尔型或浮点型。

一元和二进制表达式- GNU编译器集合(GCC)内部构件