商城网站功能列表,网页图片格式有哪些,深圳网站建设 龙华信科咨询,进销存十大软件Item 6#xff1a;区别Increment和Decrement操作符的前置#xff08;prefix#xff09;和后置#xff08;postfix#xff09;形式 前置和后置的区别主要在于函数参数不一样#xff0c;后置形式中多了一个int型的参数#xff0c;在后置形式被调用时#xff0c;编译器…Item 6区别Increment和Decrement操作符的前置prefix和后置postfix形式 前置和后置的区别主要在于函数参数不一样后置形式中多了一个int型的参数在后置形式被调用时编译器会自动给该int型参数传0值。其次在于前置和后置形式所返回的类型不同前置返回一个引用后置返回一个const对象。 下面主要讲解increment的前置和后置形式decrement类似。 //前置式累加后取出increment and fetch UPInt UPIntoperator() // 1 { (*this)1; return *this; } const UPInt UPIntoperator(int) // 2-3 { UPInt oldValue*this; (*this); // 4 renturn oldValue; } 首先请看上面4处标红的地方这些都是我们需要特别注意的地方。 1、前置返回的是引用 类型 2、后置返回的是 const 对象之所以是const类型是根据内置类型int等的、--的规则来要求的。对于内置类型 i 是不允许的但是 i 是允许的所以我们为自定义类型重载的 、-- 也应该符合这个规则。如果我们不定义返回值类型为const那么 i就可以转化为 i.operator(0) .operator(0); 得以合法执行这是错误的。原因主要有两点a不符合内置类型的规则b计算结果错误因为第二个后置式操作没有改变真正的对象的值而是改变的返回对象的值。因此最好的办法就是禁止非const返回类型合法化。 3、后置有一个int型的参数但是在函数体内并没有动用其参数是的以为该int型参数的唯一目的只是为了区别前置式和后置式。但是如果你在函数体内没有使用函数的命名参数许多编译器都会给出警告因此为了避免这类警告一种常见的策略是故意略去你不打算使用的参数的名称以上代码就是实行的这个策略。 4、这个是为了保证后置式和前置式的行为一致才这样做的。这个保证原则是后置式increment和decrement操纵符的实现应以其前置式的兄弟为基础。如此一来你只要维护前置式因为后置式会自动调整为一致的行为。 从效率方面来看推荐大家尽量使用前置式prefix而不是后置式postfix。 因为后置式有临时对象的构造和析构尤其对于自定义类型造成的影响更大。转载于:https://www.cnblogs.com/next-IT-direction/p/3599947.html