gpt4 book ai didi

c++ - 如何在 C++ 中使用插入符号 "^"进行求幂

转载 作者:太空宇宙 更新时间:2023-11-04 14:38:04 28 4
gpt4 key购买 nike

我目前正在将 MATLAB 代码重写为 C++ 代码。只需键入“a^b”就能够对“a”进行“b”的幂运算,这将使我的生活变得更加轻松,因为这是用 MATLAB 编写的原始代码量。

有没有办法做到这一点? (我正在使用原始类型)

我很乐意接受像 pow(a,b) 方法那样不涉及括号和逗号的解决方案。

提前致谢。

最佳答案

虽然可以重载^ 来求幂,但您不应该这样做。这是个坏主意。

@AaronF 的回答表明执行此操作的代码有多么丑陋,但是这只是冰山一角。当您尝试在实际代码中实际使用它时,真正的 问题就来了。问题源于一个简单的事实:重载运算符会改变该运算符执行的操作,但不会影响该运算符的优先级或结合性。在 ^ 的情况下,优先级 的结合性对于求幂来说都是完全错误的。

优先级

在 C++ 中,^ 运算符的优先级很低。求幂应该有很高的优先级。例如,像 x^y*z 这样的表达式通常表示 xyz——但它在 C++ 中的意思是 xyz .事实上在 C++ 中,^ 的优先级甚至低于加法和减法,所以即使 x^y+z 也会出错——它意味着 xy+z 而不是您想要/通常期望的 xy+z。

关联性

求幂是右结合的——但在 C++ 中,^ 运算符是左结合的。例如,给定像 x^y^z 这样的表达式,您想要/期望 的意思是 xyz,但你会得到 (xy)z(相当于 xyz).

结果

这意味着,如果您确实重载了operator^ 来求幂,那么您只能避免使用名称pow。您将不会避开大多数括号;在任何非平凡的表达式中,您仍然需要括号来强制使用正确的优先级和结合性,因为如上所述,C++ 分配给 operator^ 的优先级和结合性对于求幂来说都是完全错误的。

结论

尽管您可以重载operator^ 来进行取幂,但在这种情况下,谨慎是勇气的重要组成部分之一。在 C++ 中重载运算符时,实际上需要考虑三个因素:名称、优先级和结合性。对于良好的运算符重载,这三个都应该是正确的。有时做一个重载是合理的,其中只有三分之二是正确的,而第三个也相差不远。在这种情况下,三个中只有一个接近正确;另外两个完全是错误的。

不要这样做。这是个坏主意。

关于c++ - 如何在 C++ 中使用插入符号 "^"进行求幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24463568/

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