【问题标题】:How to reorder the C++ standard precedence of arithmetic operators, so that subtraction will have higher priority如何重新排序算术运算符的 C++ 标准优先级,以便减法具有更高的优先级
【发布时间】:2018-02-17 01:50:06
【问题描述】:

我想做一个计算器,它会问你算术运算符的优先级。例如优先级№1加法,№2除法,№3减法,№4乘法。 问题是:我需要使用重载运算符还是只使用括号?

【问题讨论】:

  • C++自身的运算符优先级与你计算器语法中的运算符优先级无关。

标签: c++ string oop operators calculator


【解决方案1】:

在进行运算符重载时,不能操纵运算符的优先级。

通常,运算符优先级是硬连线到与您的表达式关联的语法中。以 C++ 为例。

您的项目面临的挑战是您想让语法在运行时灵活。在这一点上,您偶然发现了动态编程语言。如需进一步阅读,请参阅https://en.wikipedia.org/wiki/Dynamic_programming_language

您想要做的当然是可能的,但您必须小心构建解析器和词法分析器的方式。

【讨论】:

    【解决方案2】:

    实际上,您可以实现相当于使用运算符重载来操纵运算符的优先级 - 这将涉及引入您自己的类并对它们执行操作。

    在实现要降低优先级的操作时,您可以通过存储 2 个值并存储该操作或返回特定于该操作的类来实现它。 转换回结果时,您可以按照您选择的顺序应用存储的操作。

    + 优先级高于 * 的示例:-

    struct Multiple;
    
    struct Number
    {
        Number(double val)
            : m_Val(val)
        {}
    
        friend double operator+(const Multiple& left, const Number& right);
        friend Multiple operator*(const Number& left, const Number& right);
    
        private:
        double m_Val;
    
    };
    
    struct Multiple
    {
        Multiple(double left, double right)
          : m_left(left),
            m_right(right)
        {}
    
        friend double operator+(const Multiple& left, const Number& right);
    
        private:
        double m_left;
        double m_right;
    };
    
    Multiple operator*(const Number& left, const Number& right)
    {
        return Multiple(left.m_Val, right.m_Val);
    }
    
    double operator+(const Multiple& a, const Number& b)
    {
        return a.m_left * (a.m_right + b.m_Val);
    }
    
    
    void main()
    {
        Number a(3);
        Number b(1);
        Number c(2);
    
        double d = a * b + c;
        // d = 9 (not 5)
    }
    

    但是在您的问题中,您说了一些关于仅使用括号的内容-我不清楚您在做什么,但是如果您可以仅通过添加括号来做到这一点,那听起来就更简单了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-03
      • 2015-08-29
      • 2019-06-06
      • 2013-02-24
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多