C++输出与C#的输出的区别?

Xuon 2007-12-20 01:12:36
using System;

namespace ConsoleApplication1
{
class Class1
{
[STAThread]

static void addout(int m,int n,int j)
{
Console.WriteLine("{0},{1},{2}",m,n,j);
Console.ReadLine();
}
static void Main(string[] args)

{
int i=0;
addout(i++,i++,i++);
}
}
}
上面是C#程序,输出的是0,1,2
在C++中类似的储程序输出的是:0,0,0


C++程序:
#include "iostream.h"

void addout(int m,int n,int j)
{
cout<<m<<","<<n<<','<<j<<endl;
}

void main()
{
int i=0;
addout(i++,i++,i++);
}


输出不一样原因是因为C++中的是一次输出,而C#中是依次输出?
或者是因为C++中参数传递是整体一起传的,而C#中是按逗号运算符的顺序依次传递的?
...全文
214 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Xuon 2007-12-21
  • 打赏
  • 举报
回复
没人?
那我自己顶了.



下面是我的分析(有错的话,请指教):


从C++的程序可以看出来:
主函数中的三个实参可能是一起传递到子函数的三个形参的,并没有遵守逗号运算符从左到右的顺序。而且C++中是同时输出的(即使用三条输出语句输出)。
或者是i++只是视为一个实参同时传递给3个形参的,别没有三个一起传递或者分别传递,并且是同时输出。

理由:
因为i++是先用后加,如果某一个i++先加的话,结果就不会是0,0,0


如果C#的参数传递也同上,那么从C#的程序可以看出Console.WriteLine("{0},{1},{2}",m,n,j);其实是分三步输出的。


总结:
如果三个参数是一起传递的,那么数据总线的位数似乎不够。解释为三个" i++ ”是视为一个实参同时传递给三个形参才说的过去。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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