【发布时间】:2015-07-19 19:43:57
【问题描述】:
我正在尝试编写一个矩阵计算器,但遇到了一个困难。如果我有A = B*C,那么B*C 会使用我重载的operator*(const Matrix&) 进行评估,其中我需要一些临时对象来进行计算。这工作正常。但是一旦我遇到更复杂的东西,我需要更多的临时对象,显然我不想手动/有一个混合。
说我要评估:
Matrix A = B*C + D*E*F + G*H;
然后运算符优先级告诉我,* 将首先被评估。所以:
Step 1) B*C -> t1
Step 2) D*E -> t2
Step 3) t2*F-> t3
Step 4) G*H -> t4
Step 5) t1+t2 -> t5
Step 6) t5+t4 -> t6
Step 7) A=t6
这是确切的顺序吗?还是顺序不确定?我的想法是创建一个链表,我将检查我的 + 和 *,如果正在计算的对象(例如 t2*F)是临时的,那么我可以适当地删除/插入它们。
【问题讨论】:
-
我不知道您对链表的要求是什么,但未指定确切的评估顺序。
B*C将在+之前进行评估,但您不能假设B*C在D*E*F或G*H之前排序。 -
您有两个问题,然后是您想要做什么的陈述。您试图解决的感知问题是什么?是否取决于您对问题的回答?
标签: c++ operator-keyword operator-precedence