C++中的指数运算符

Jam*_*yek 21 c++ exponential

我正在上C++课,我注意到只有几个数学运算符可供使用.我还注意到C++在其数学库中没有指数运算符.

为什么必须总是为此写一个函数?C++的制造商是否有理由省略此运算符?

pax*_*blo 52

没有为此写一个函数(当然,除非你是疯了).标题中定义了一个非常好的pow函数<cmath>.

除此之外:如果你试图^用作权力运营商,就像有些人常常做的那样,你会遇到一个令人讨厌的惊喜.它是独占或(XOR)运算符(见此处).

  • 可爱的^陷阱;) (9认同)
  • 它的*NOT*OR,它的XOR :)参见:http://en.wikipedia.org/wiki/Bitwise_operation#XOR (7认同)
  • @ dan04别傻了.它也适用于-1 ^ -2. (7认同)

msw*_*msw 9

大多数C操作容易意图 映射到单个处理器指令当C被发明.当时,取幂不是机器指令,因此是库例程.

  • 事实上,float-to-int 的转换和返回是隐式的,即不需要操作,但它们比单个处理器指令要昂贵得多。 (3认同)
  • “意图”可能太强烈了。C *确实*直接映射到了那个时代常见架构的指令集,但我从未读过 K *或* R 说“我们不能拥有该功能,这不是机器所做的事情......” 。 (2认同)

Pix*_*ech 7

根据Bjarne Stroustrup在他的书"C++的设计和演变"中的说法.他们决定避免使用指数运算符,因为:

  • 运营商提供符号方便,但不提供任何新功能.代表科学/工程计算的重度用户的工作组成员表示,操作符语法提供了较小的语法便利性.
  • 每个C++用户都必须学习这个新功能
  • 用户强调了将自己的专用取幂函数用于系统默认值的重要性,这对于内部运算符是不可能的.
  • 该提案的动机不足.特别是,通过查看一个30000行的Fortran程序,我不能断定运算符将在C++中广泛使用
  • 该提案需要添加新的运算符并添加另一个优先级,从而增加了语言的复杂性

  • 没有指数运算符,因为“每个 C++ 用户都必须学习这个新功能”。因此,让他们在有史以来创建的最复杂的语言之一中学习数十种超级复杂、微妙和神秘的语义规则是非常酷的,但**这个**太多了。 (6认同)
  • 求幂运算符允许将此类计算包含在编译时常数表达式中。此类操作的使用量并不大,但有时它们确实会很有帮助。 (2认同)

Wil*_*eld 6

Python 有**求幂运算符。在 C++ 中,您实际上可以通过一些技巧来定义这样的运算符。通过将一元*运算符与二元*运算符组合起来,如下所示:

#include <cmath>
#include <iostream>

struct Num {
    double value;

    Num(double value) : value(value) { }

    typedef Num* HalfStar;

    HalfStar operator*() const { return HalfStar(this); }
    Num operator*(const HalfStar& rhs) const
    {
        return Num(std::pow(value, rhs->value));
    }
    Num operator*(const Num& rhs) const
    {
        return Num(value * rhs.value);
    }

    friend std::ostream& operator<<(std::ostream& os, const Num& n)
    {
        return os << n.value;
    }
};

int main(int argc, char**argv)
{
    Num a = 10;
    Num b = 9;

    std::cout << "a*b = " << (a*b) << "\n";
    std::cout << "a**b = " << (a**b) << "\n";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但这不适用于非类类型,因此您不能这样做:x**2

请参阅此处 的实例。