Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;关于增量运算符的编译器问题_C++ - Fatal编程技术网

C++ C++;关于增量运算符的编译器问题

C++ C++;关于增量运算符的编译器问题,c++,C++,为什么在旧编译器中使用前缀递增运算符而不是后缀运算符被认为是不好的做法?据我所知,现代编译器对此进行了优化,而旧的编译器则没有。有没有一个特别的原因是一个比另一个慢,还有一个原因是它在编译代码中保持优化? 如果您能提供有关运算符和编译器的任何其他详细信息,我将不胜感激,谢谢。您所说的“旧”一定是指非常旧的 原因是,在真正优化之前,C/Unix开发的主要系统是PDP-11和后来的VAX-11。PDP和VAX具有递减前和递增后寻址模式 MOVL R0, -(R1) ; Decrements R

为什么在旧编译器中使用前缀递增运算符而不是后缀运算符被认为是不好的做法?据我所知,现代编译器对此进行了优化,而旧的编译器则没有。有没有一个特别的原因是一个比另一个慢,还有一个原因是它在编译代码中保持优化? 如果您能提供有关运算符和编译器的任何其他详细信息,我将不胜感激,谢谢。

您所说的“旧”一定是指非常旧的

原因是,在真正优化之前,C/Unix开发的主要系统是PDP-11和后来的VAX-11。PDP和VAX具有递减前和递增后寻址模式

   MOVL R0, -(R1) ; Decrements R1 by 4 and move the value of R0 to that location.
   MOVL (R1)+, R2 ; Move the value at R1 to R2 then add 4 to R1.
这些将是C的等价物

  *(--a) = b ;
  b = *(a++) ;
在很少进行优化的日子里,这些可以很容易地映射回底层的汇编指令

同时,这些寻址模式不存在,其作用正好相反:

  MOVL (R0)-, R1
  MOVL +(R0), R1
因此,没有到的硬件映射

*(++a) = b ;
b = *(a--) ;
-(Rx)和(Rx)+寻址模式使实现向下增长的堆栈变得容易

你说的“老”一定是指非常老了

原因是,在真正优化之前,C/Unix开发的主要系统是PDP-11和后来的VAX-11。PDP和VAX具有递减前和递增后寻址模式

   MOVL R0, -(R1) ; Decrements R1 by 4 and move the value of R0 to that location.
   MOVL (R1)+, R2 ; Move the value at R1 to R2 then add 4 to R1.
这些将是C的等价物

  *(--a) = b ;
  b = *(a++) ;
在很少进行优化的日子里,这些可以很容易地映射回底层的汇编指令

同时,这些寻址模式不存在,其作用正好相反:

  MOVL (R0)-, R1
  MOVL +(R0), R1
因此,没有到的硬件映射

*(++a) = b ;
b = *(a--) ;
-(Rx)和(Rx)+寻址模式使实现向下增长的堆栈变得容易

你说的“老”一定是指非常老了

原因是,在真正优化之前,C/Unix开发的主要系统是PDP-11和后来的VAX-11。PDP和VAX具有递减前和递增后寻址模式

   MOVL R0, -(R1) ; Decrements R1 by 4 and move the value of R0 to that location.
   MOVL (R1)+, R2 ; Move the value at R1 to R2 then add 4 to R1.
这些将是C的等价物

  *(--a) = b ;
  b = *(a++) ;
在很少进行优化的日子里,这些可以很容易地映射回底层的汇编指令

同时,这些寻址模式不存在,其作用正好相反:

  MOVL (R0)-, R1
  MOVL +(R0), R1
因此,没有到的硬件映射

*(++a) = b ;
b = *(a--) ;
-(Rx)和(Rx)+寻址模式使实现向下增长的堆栈变得容易

你说的“老”一定是指非常老了

原因是,在真正优化之前,C/Unix开发的主要系统是PDP-11和后来的VAX-11。PDP和VAX具有递减前和递增后寻址模式

   MOVL R0, -(R1) ; Decrements R1 by 4 and move the value of R0 to that location.
   MOVL (R1)+, R2 ; Move the value at R1 to R2 then add 4 to R1.
这些将是C的等价物

  *(--a) = b ;
  b = *(a++) ;
在很少进行优化的日子里,这些可以很容易地映射回底层的汇编指令

同时,这些寻址模式不存在,其作用正好相反:

  MOVL (R0)-, R1
  MOVL +(R0), R1
因此,没有到的硬件映射

*(++a) = b ;
b = *(a--) ;

-(Rx)和(Rx)+寻址模式使实现向下增长的堆栈变得容易

在旧的编译器中使用前缀递增运算符和后缀运算符是不好的做法吗?相关问题和答案:你真的想说
++p
p++
更糟糕吗?通常没有区别,或者(在特定情况下,例如使用重载运算符),
p++
较慢。Postincrement/postdirection复制对象。不过,这对内置类型没有任何影响,或者甚至对于枚举上的重载运算符-这只对类类型上的重载运算符有影响。是否有人提到在旧编译器中使用前缀增量运算符和后缀运算符是不好的做法?相关问题和答案:你真的想说
++p
p++
更糟糕吗?通常没有区别,或者(在特定情况下,例如使用重载运算符),
p++
较慢。Postincrement/postdirection复制对象。不过,这对内置类型没有任何影响,或者甚至对于枚举上的重载运算符-这只对类类型上的重载运算符有影响。是否有人提到在旧编译器中使用前缀增量运算符和后缀运算符是不好的做法?相关问题和答案:你真的想说
++p
p++
更糟糕吗?通常没有区别,或者(在特定情况下,例如使用重载运算符),
p++
较慢。Postincrement/postdirection复制对象。不过,这对内置类型没有任何影响,或者甚至对于枚举上的重载运算符-这只对类类型上的重载运算符有影响。是否有人提到在旧编译器中使用前缀增量运算符和后缀运算符是不好的做法?相关问题和答案:你真的想说
++p
p++
更糟糕吗?通常没有区别,或者(在特定情况下,例如使用重载运算符),
p++
较慢。Postincrement/postdirection复制对象。不过,这对内置类型没有任何影响,甚至对枚举上的重载运算符也没有影响——它只对类类型上的重载运算符有影响。