社区
C语言
帖子详情
计算符号的左右结合性决定了什么?
积木
2004-08-23 04:24:57
例如:
void f(int i)
{
cout<<i<<endl;
}
int main()
{
f(1)+f(2)+f(3)+f(4)+f(5);
return 0;
}
如果+为左结合,结果是什么?
如果是右结合,结果是什么?
不同的编译器结果不同是不是因为左右结合性不同?还是别的什么?呵呵
...全文
627
33
打赏
收藏
计算符号的左右结合性决定了什么?
例如: void f(int i) { cout<<i<<endl; } int main() { f(1)+f(2)+f(3)+f(4)+f(5); return 0; } 如果+为左结合,结果是什么? 如果是右结合,结果是什么? 不同的编译器结果不同是不是因为左右结合性不同?还是别的什么?呵呵
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
33 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sunjueqian
2004-08-24
打赏
举报
回复
哦,解释得很清楚,谢谢:)
whyglinux
2004-08-24
打赏
举报
回复
C/C++标准规定了运算符的功能和它们的结合性。运算符的结合性在C和C++中是一致的,并且不能被改变。但是在C++程序中,由于可以对运算符进行重载,所以运算符的功能会发生变化,但是它的结合性仍保持不变。
运算符的结合性决定了同级运算符时的运算顺序。例如:对于表达式 a - b + c,+、-为同级运算符,左结合,因此它的运算顺序为 (a - b) + c,即先计算 a - b 的值,然后再与 c 相加。这个运算顺序对于任何的C/C++编译器都是一致的。
问题在于:C/C++标准没有规定操作数运算的先后顺序。这也就是说,对于上面的表达式,操作数 a、b 和 c 的计算顺序是不固定的。其原因在于:每个编译器采取的计算操作数顺序不同。对于同级运算,有的从左到右,有的与此相反;甚至有可能a、b、c的计算顺序取决于表达式中运算符的优先级。
表达式或者操作数的结果不应该倚赖于表达式中操作数计算的先后顺序。
例外情况是:&&、||、?: 和 ,。对于它们,C/C++标准明确规定了操作数的计算先后顺序。例如:对于a && b,一定是先计算 a,然后根据 a 的结果决定是否再计算 b。对于这些特殊情况,应该与一般情况加以区分。
sandrowjw
2004-08-24
打赏
举报
回复
顶……顶……顶一下
laomai
2004-08-24
打赏
举报
回复
三井,把MM介绍到值班室里来,大家可以考虑不追究你的责任,不然,嘿嘿......
bianliuwei
2004-08-24
打赏
举报
回复
星星发的帖子果真不错,用顶来表示支持.
积木
2004-08-24
打赏
举报
回复
这两天公司考C语言基础,结果就闹出来点东西,虽然代码不应该这么写
但是的确有很多细节将来就是bug的隐患,这个问题不大却有可能一时图省事就那么写了
真正好的写法还是
s+=f(i),就没有任何的问题了,呵呵
错误常常在无“意义”的地方发生
an9ryfr09
2004-08-24
打赏
举报
回复
支持楼上的!!!
TO 三井: MM漂不漂亮?
不明白MM为何问这种没有意义的问题,'+'是左结合还是右结合在ANSI里面已经明确说明了都。
比如'++'或'--',他们是右结合,所以a = ++b就会先算++b,a = b++就会先算a = b
wzzxq
2004-08-24
打赏
举报
回复
f()的返回值是void,可以放在运算符里吗??
yjh1982
2004-08-24
打赏
举报
回复
所谓结合性,指的是同优先级.....函数调用肯定比+操作优先级高.
所以fun(1)+fun(2)
两个fun先计算...然后再加.
fun(1)+fun(2)+fun(3)
有可能
先fun(1),后fun(2)两者相加后加上fun(3);再
或
fun(1),fun(2),fun(3)...在把他们的临时对象相加.
这两种情况都不会影响fun的调用顺序啊.
albertlee
2004-08-24
打赏
举报
回复
晕!!!!!!!!!!!
这种代码有意义吗?
这种C语言基础知识有意义吗?
pjg
2004-08-23
打赏
举报
回复
if(mm!=beauty)
{
for( ; ;)
{
textcolor(LIGHTRED);
printf("\n\n\n");
cprintf(" BS BS BS BS\n\r");
printf("\n\n");
asm push ax
asm mov ah,0
asm int 16h
asm pop ax
continue;
}
}
sunjueqian
2004-08-23
打赏
举报
回复
我认为运算符的左右结合性不能决定函数的计算顺序,只能决定压栈的顺序,但是函数值是在什么时候算的应该要看编译系统吧。这个问题本来是这样引起的(++i)+(++i)+(++i)=?,假如i的初值是1,可能的结果都有什么呢?6也是可能的结果吧,先计算的哪一部分呢?于是问题就被扩大了。我只是想,这个问题和运算符的结合性没有关系吧。不怎么会c,问题难免会很菜,不要见笑
sunjueqian
2004-08-23
打赏
举报
回复
打个招呼,大家好。我就是那个把三井兄说把他灭了的人,我觉得这个问题很值得讨论一下,所以谢谢大家赐教啊
zqpsswh
2004-08-23
打赏
举报
回复
函数和变量在计算机里都是以地址的方式被提取的
计算机处理的态度都是一样
zqpsswh
2004-08-23
打赏
举报
回复
可以把f(n)函数看是一个表达式的地址
左右的顺序将决定提取这个f(1)+...+f(5)的表达式的先后顺序
影响到最终的结果
积木
2004-08-23
打赏
举报
回复
今天被mm逼疯了
晨星
2004-08-23
打赏
举报
回复
在VC中,下面前后两次对12345的输出顺序的确是不一样的。应该是因为“+”和“=”的结合性不同吧?
#include <iostream>
using namespace std;
int g;
int& f(int i)
{
cout<<i<<endl;
return g;
}
int main()
{
f(1) = f(2) = f(3) = f(4) = f(5);
cout << endl;
f(1) + f(2) + f(3) + f(4) + f(5);
return 0;
}
laomai
2004-08-23
打赏
举报
回复
呵呵,一3井今天屡次犯下低级错误。
1、用void类型的数据参与加法计算
2、给分时采用系统默认的20分,
3、最最不可原谅的,被计算机MM的灭了,不但影响了星星的光辉形象,更败坏了值班室的名头,
兄弟们说说该怎么处理?呵呵。
pacman2000
2004-08-23
打赏
举报
回复
int f(int i)
呵呵。顺序应该跟编译器实现有关!
cxjddd
2004-08-23
打赏
举报
回复
我来说说,不一定对:
也许要说明一点,C 里的运算不一定满足交换律,所在其运算顺序有区别。
如果不是相同的运算符,那就应该按优先等级来,这个很明确。
如果是相同的话,那就看是左结合还是右结合了。很明显,左结合是指从左算到右,右结合是指从右算到左。
TC++PL 里说,一元运算符和赋值运算符是右结合的,其他运算符都是左结合的。
加载更多回复(13)
c语言运算符优先级,
结合性
(左/右结合详解)
重新翻了遍c语言,觉得对c语言运算符
结合性
有必要提一下,毕竟去年我自己刚学c语言的时候,就没搞明白
结合性
的问题。 什么是左结合?什么是右结合?它们是干嘛用的?它们是什么时候用的? 本文将围绕这几个问题...
4.1 Java运算符基础与运算符
结合性
Java运算符基础,一元运算符,二元运算符,移位关系运算符,逻辑运算符,运算符优先级,运算符
结合性
可
计算
性理论与复杂性介绍
什么是电脑?
计算
科学可以追溯到在这些现代
计算
机设备还没有被想象出来之前很长一段时间。在一个更经常被问到的问题中,围绕着编程语言、框架和库的问题,我们常常想当然地认为,
计算
机的基本...
关于C语言中表达式运算顺序(优先级、
结合性
、副作用、序列点)的讨论以及c语言未定义行为
关于C语言中表达式运算顺序(优先级、
结合性
、副作用、序列点)的讨论以及c语言未定义行为
Latex各种命令、
符号
、公式、数学
符号
、排版等
本文仅供学习参考使用,一切版权和解释权均归原作者所有,转载地址:...数学
符号
详细内容见:http://mohu.org/info/symbols/symbols.htm 直接查看链接 http://www.mo
C语言
69,335
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章