我对C++中表达式的看法

dot99 2002-03-12 03:40:37
C++中的所有表达式均为函数,而C++中的函数入栈顺序是从右开始
所以:
x = 3;
y = (++x, x--, --x ++x, --x, x--);
中,栈及x的值的情况是
stack [3, 1, 2, 1, 1, 1
x [2, 1, 2, 1, 0, 1
y右边的运算顺序也是从右开始,不是同时进行的
y最先的值是1(由于先pop),最终y为3

不知对否?
...全文
59 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuicai 2002-03-14
  • 打赏
  • 举报
回复
如果你只是一个程序员,没必要去抠这个问题。
多用几个括号就行了。

如果你是理论专家,你可以去研究他,弄个新的编译算发出来。
liu_feng_fly 2002-03-14
  • 打赏
  • 举报
回复
默认的是__cdecl

__cdecl
Home | Overview | How Do I

Microsoft Specific —>

This is the default calling convention for C and C++ programs. Because the stack is cleaned up by the caller, it can do vararg functions. The __cdecl calling convention creates larger executables than __stdcall, because it requires each function call to include stack cleanup code. The following list shows the implementation of this calling convention.

Element Implementation
Argument-passing order Right to left
Stack-maintenance responsibility Calling function pops the arguments from the stack
Name-decoration convention Underscore character (_) is prefixed to names
Case-translation convention No case translation performed
liu_feng_fly 2002-03-14
  • 打赏
  • 举报
回复
好像C++里面默认的是__stdcall ?????
默认是cdecl,看看msdn吧
This is the default calling convention for C and C++ programs. Because the stack is cleaned up by the caller, it can do vararg functions. The __cdecl calling convention creates larger executables than __stdcall, because it requires each function call to include stack cleanup code. The following list shows the implementation of this calling convention.

Element Implementation
Argument-passing order Right to left
Stack-maintenance responsibility Calling function pops the arguments from the stack
Name-decoration convention Underscore character (_) is prefixed to names
Case-translation convention No case translation performed

dot99 2002-03-14
  • 打赏
  • 举报
回复
我在研究研究

先把分给了
Wugifer 2002-03-12
  • 打赏
  • 举报
回复
和编译器相关,在VC6.0和VC7.0中就不一样
dot99 2002-03-12
  • 打赏
  • 举报
回复
好像C++里面默认的是__stdcall
我这样理解就是从运算符重载来的
另外反编译后的指令也是这样的
tigerfox 2002-03-12
  • 打赏
  • 举报
回复
不一定,函数参数入栈。可以从左到右也可以从右到左。可以指定编译参数。
好像是: __clecs __stdcall __pascal
另外表达式就是表达式,其是有值的。和函数是两码事。
neccui 2002-03-12
  • 打赏
  • 举报
回复
表达式就是表达式,不是函数。
当然了,操作符重载例外。

而且从左到右还是从右到左,对表达式而言,都不一定的。看具体实现了。
不应该根据某个编译器的表现就下结论,我也曾经这样犯过一些错误。
dot99 2002-03-12
  • 打赏
  • 举报
回复
那应该怎么理解呢?
neccui 2002-03-12
  • 打赏
  • 举报
回复
dot99 () const;//永远的dot99() 理解错误。

xiel 2002-03-12
  • 打赏
  • 举报
回复
不一定
要看编译器
C++至今在二进制层无规定
cstpjl 2002-03-12
  • 打赏
  • 举报
回复
这个有用吗?
Google的C++编码规范对外发布,引起了业内开发人员的广泛关注。 其,来自硅谷的柯化成认为,这是地球上最好的一份C++编程规范,没有之一,建议广大国内外IT人员研究使用。 盛大的资深开发者赵劼表示,“非常同意。Google在这方面下足了功夫,让所有人写出来的代码都使用同样的规范,就好像在工程师编程世界里普及普通话一样。很多资深工程师刚加入的时候被迫学习编码规范,开始不习惯,后来发现收益非浅。所谓磨刀不误砍柴功,创业公司更应该关注。” 科泰的陈榕也认为,“希望Google索性再出版一个工具,类似早先C语言的lint,按照该规范自动排版。否则谁记得住这么多条条框框?” C++开发者杜昶旭给大家的建议是,“建议所有开发人员反复阅读此编码规范,直到可以背下来再开始写代码。当然,更好的做法是根据这个再补充出更具体的执行策略。学校里这些知识老师强调的太少,提前自学吧。” 当然,也有不同的声音,来自大连的sagasw就认为,“关于Google的C++编码规范,不知为何突然又火起来,这个规范在C++社区应用的不多,关注度远不如Gtest,另外这个规范对于Google是有帮助的,但不是最好的,也不是一定适合每个公司的,每个决定后面都有一个tradeoff,不知这些光会用规范,那意义不大。” “土豆”也表示,“Google的C++编码规范没有说的这么好吧,至少我看Webkit的源码,明显苹果的代码比Google的代码漂亮些,也容易看些,受不了Google源码的N多下划线。” 创新工场董事长兼CEO李开复在腾讯微博上透露,Google的C++编码规范已经公开。“我认为这是地球上最好的一份C++编程规范,没有之一,建议广大国内外IT研究使用。”李开复对Google C++编码规范给予了极高的评价。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧