gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:28:19 24 4
gpt4 key购买 nike

我一直想知道为什么许多语言没有内置这样简单和基本的操作,例如交换两个变量的内容。

它是计算机科学类(class)中最基本的编程练习之一;它在许多算法中被大量使用(例如排序);时不时地需要它,并且必须使用临时变量或使用模板/通用函数。

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

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

那么,原因是什么?或者它真的存在,而我总是错过它?

最佳答案

根据我的经验,除了已经提到的排序算法和偶尔在低级硬件戳中之外,在实际应用中并不常见,所以在我看来,它有点过于特殊,无法在通用语言中使用.

如前所述,并非所有处理器都支持将其作为指令(并且许多处理器不支持大于一个字的对象)。因此,如果它支持一些有用的附加语义(例如作为原子操作),那么在某些处理器上将很难支持,如果它没有附加语义,那么它只是(很少使用)synatatic 糖。

支持赋值运算符(+= 等),因为它们在现实世界的程序中更为常见——因此它们提供的语法糖更有用,而且作为一种优化——记住 C 的历史可以追溯到 60 年代末/70 年代初,并且编译器优化没有那么先进(而且机器能力较差,所以无论如何你都不想进行冗长的优化过程)。

保罗

关于programming-languages - 为什么 C/C++/C#/Java 等命令式或 OO 语言中不存在交换/交换运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/286481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com