当前位置:  开发笔记 > 编程语言 > 正文

为什么在C/C++/C#/ Java等命令式或OO语言中不存在交换/交换运算符?

如何解决《为什么在C/C++/C#/Java等命令式或OO语言中不存在交换/交换运算符?》经验,为你挑选了1个好方法。

我总是想知道为什么这样一个简单而基本的操作,比如交换两个变量的内容,并不是内置于许多语言中的.

它是计算机科学课程中最基本的编程练习之一; 它在很多算法中被大量使用(例如排序); 每隔一段时间就需要它,并且必须使用临时变量或使用模板/泛型函数.

它甚至是许多处理器上的基本机器指令,因此具有临时变量的标准方案将得到优化.

已经创建了许多不太明显的运算符,例如赋值运算符(例如+ =,可能是为了反映累积的机器指令而创建的,例如添加ax,bx),或者?? C#中的运算符.

那么,原因是什么?或者它确实存在,我总是错过它?



1> The Archetyp..:

根据我的经验,除了已经提到的排序算法以及偶尔在低级别的硬件中,它在实际应用中并不常见,因此在我看来,使用通用语言有点太特殊了. .

正如前面提到的,并非所有处理器都支持它作为指令(并且许多处理器不支持大于单词的对象).因此,如果它支持一些有用的附加语义(例如,作为原子操作),则难以在某些处理器上支持,并且如果它没有额外的语义,则它(仅很少使用)同步糖.

支持运算符(+ =等)是因为它们在现实世界的程序中更常见 - 因此它们提供的合成糖更有用,并且作为优化 - 记住60年代末/ 70年代初的C日期,并且编译器优化不那么先进(并且机器功能较差,所以你不需要冗长的优化传递).

保罗

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有