c++关于运算符结合性的问题
我们知道*和+的结合性都是从左往右的,那么下面这两段解释是不是矛盾了呢图2是从左往右算,图1是从右往左算...
我们知道*和+的结合性都是从左往右的,那么下面这两段解释是不是矛盾了呢图2是从左往右算,图1是从右往左算
展开
2个回答
展开全部
1 结合性指的是运算符出现的时候,与哪边的操作数结合进行运算。
比如逻辑非运算就是右结合,会与操作符!右侧的表达式进行运算。
2 单目双目指的是运算符出现时参与运算的表达式个数。
单目是只有一个操作数,即只和一个表达式有关,执行运算,比如逻辑非(!), 位操作的取反(~)运算等。
双目是指运算符两边的表达式均会参与运算,此类运算符在C++中是最多的,包括数学运算(+=*/%),逻辑运算(&&,||), 位运算(&,^,|)等。
除此外,C++中还存在三目运算符?:, 运算符中间和两边的三个表达式均会参与运算,形式为
expr1?expr2:expr3。
比如逻辑非运算就是右结合,会与操作符!右侧的表达式进行运算。
2 单目双目指的是运算符出现时参与运算的表达式个数。
单目是只有一个操作数,即只和一个表达式有关,执行运算,比如逻辑非(!), 位操作的取反(~)运算等。
双目是指运算符两边的表达式均会参与运算,此类运算符在C++中是最多的,包括数学运算(+=*/%),逻辑运算(&&,||), 位运算(&,^,|)等。
除此外,C++中还存在三目运算符?:, 运算符中间和两边的三个表达式均会参与运算,形式为
expr1?expr2:expr3。
展开全部
t1 + t2 + t3根据从左往右的结合性可知计算顺序是先计算t1+t2的值,然后计算该值和t3相加的结果。
对于未重载的加号,t1+t2的值就是t1和t2进行算术加法的值。
对于重载过的加号,t1+t2的值是t1对象的成员函数operator+(t2)的返回值,也就是t1.operator+(t2)的值。这个值是一个对象,在这个对象上进一步调用函数operator+(t3),得到最终的返回值。
不论是否重载,运算符的优先级和结合性都不会改变。
所以t4 = t1 + t2 + t3在重载operator+时,实际执行的是t4 = (t1.operator+(t2)).operator+(t3)。图中的运算顺序的解释是不正确的。
对于未重载的加号,t1+t2的值就是t1和t2进行算术加法的值。
对于重载过的加号,t1+t2的值是t1对象的成员函数operator+(t2)的返回值,也就是t1.operator+(t2)的值。这个值是一个对象,在这个对象上进一步调用函数operator+(t3),得到最终的返回值。
不论是否重载,运算符的优先级和结合性都不会改变。
所以t4 = t1 + t2 + t3在重载operator+时,实际执行的是t4 = (t1.operator+(t2)).operator+(t3)。图中的运算顺序的解释是不正确的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询