社区
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;
}
如果+为左结合,结果是什么?
如果是右结合,结果是什么?
不同的编译器结果不同是不是因为左右结合性不同?还是别的什么?呵呵
...全文
693
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)
一直以来都没直视的轮播-_-
一直以来做项目碰到轮播图我都是去网站上找现成插件拿来用,现成的插件1是省时间,拿来改改尺寸改改参数就能直接用,2是现在的插件确实很强大,对于我一个刚刚学习前端的人来说,牛人写的轮播我看懂也要花些功夫,更别说在工作中写出来,估计写出来以后,整个项目都要因我延时了... 我做过的项目也不多,开始用的最多的就是bootstrap里面的轮播,具备最基础的功能,很适合我刚开始做项目用,最近我无意发
一分钟学会如何自定义小程序轮播图
1. 小程序前端样式控制还是css,那么我们找到css就可以修改。先在浏览器打开,方便调试。2. 鼠标放到轮播图点上,鼠标变成小手后--->点击鼠标右键--->检查 好了,我们定位到了控制样式的css 3. 这下可以开始搞了,不过先别急着代码里更改,我们先在调试窗口试着更改下css样式,看是否定位正确。哦了,当我把宽高都变为20px后,明显轮播图的点变大了。这样就确定之前的分析是正确的。4. 开始在代码里改成我们想要的样式。(如果对css不熟悉的小伙伴,可以继续在浏览器里不停尝试到自己想要的效果再在
一分钟学会如何自定义小程序轮播图(蜜雪冰城Demo)
好了,我们定位到了控制样式的css 3. 这下可以开始搞了,不过先别急着代码里更改,我们先在调试窗口试着更改下css样式,看是否定位正确。 哦了,当我把宽高都变为20px后,明显轮播图的点变大了。这样就确定之前的分析是正确的。 o yeah!完工了,我真是个天才。 嗳,不对,浏览器打开怎么还是以前的样式? 是不是编译器没编译最新的?好,再编译一次,不行 是不是浏览器缓存导致的?好,删除缓存,还是不行。。 哦,知道了,一定是没写 !important,它的样式没有覆盖掉,加上,还是不行。。。毁灭吧,累了 l
css+jquery实现图片滑动特效果animate动画+定位纯手写
通过jquery框架动画函数animate,结合css的position 绝对定位,实现图片自动的轮播,轮播内容不限于图片,也可以是自定义的html模块。想当年做后端开发,对前端总是保持了“强烈的敬畏心”,尤其是对这些滑动的css特效,更是“不忍直视”,但是逼急之后,只能手撕它了!
第四个页面:制作电影资讯页面
post.wxml修改轮播图代码如下: <!-- 添加点击事件,这里利用了事件冒泡的机制 --> <swiper catchtap='onSwiperTap' indicator-dots='true' autoplay='true' interval='5000'> <!-- 每一项里都放了一个图片 --> ...
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章