游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3780|回复: 12

MS 的代码中,为啥要这样使用形参???

[复制链接]

21

主题

112

帖子

118

积分

注册会员

Rank: 2

积分
118
发表于 2009-1-13 08:36:00 | 显示全部楼层 |阅读模式
为什么在 MS 的代码中,使用函数的形参这么麻烦???

对于函数形参的使用,我一般是这样的:



int Draw(LPD3DDEVICE lpDevice)

{

    // 直接对形参使用;

    Sprite->Draw(lpDevice,&rect,.....)

}



在 MS 的代码中,对形参的使用,还要“拐个弯”



int Draw(LPD3DDEVICE lpDevice)

{

    LPD3DDEVICE Device;  //为什么不直接使用形参,而在函数内部定义一个局部变量,然后把形参赋值给他????

    Device=lpDevice;          //不浪费时间和资源???

    Sprite->Draw(Device,&rect,.....)

}



如果是为了安全性的考虑,直接把函数声明改成:  int Draw(Const LPD3DDEVICE lpDevice)  加上 Const 关键字也可以啊。。。。

不解。。。。

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-1-13 16:38:00 | 显示全部楼层

Re:MS 的代码中,为啥要这样使用形参???

人家找实习生写的代码呗

21

主题

112

帖子

118

积分

注册会员

Rank: 2

积分
118
 楼主| 发表于 2009-1-13 16:47:00 | 显示全部楼层

Re:MS 的代码中,为啥要这样使用形参???

是谁写的不重要,我只想知道,这样做的目的何在??
如果是从“保护实参地址”的角度考虑的话,用 const 应该更方便吧,也更容易阅读

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-1-13 17:23:00 | 显示全部楼层

Re:MS 的代码中,为啥要这样使用形参???

没啥目的,不用认为MS做的东西都是好的

21

主题

112

帖子

118

积分

注册会员

Rank: 2

积分
118
 楼主| 发表于 2009-1-13 17:26:00 | 显示全部楼层

Re:MS 的代码中,为啥要这样使用形参???

哦。。。原来如此。。。
“权威”与“自信”的古老话题,那么。。。我用自己的 const 好了。。。

PS:qrli 兄弟,你回帖够快的。。。。

8

主题

390

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2009-1-14 09:08:00 | 显示全部楼层

Re:MS 的代码中,为啥要这样使用形参???

如果你跟老外一起工作过,你就知道,微软的代码是大家嘲笑的对象。。。。而不是学习,哈哈。。。。。看微软代码不如看开源的。。。。。

21

主题

112

帖子

118

积分

注册会员

Rank: 2

积分
118
 楼主| 发表于 2009-1-14 11:33:00 | 显示全部楼层

Re:MS 的代码中,为啥要这样使用形参???

“微软的代码是大家嘲笑的对象”。。。。
有这么夸张哇。。。看来凡事都要用批判的眼光去看啊。。。哎。。。。
不过我认为,对于我这种高不成,低不就的人来说,还是可以从MS的代码中,学到一些东西的。。。

21

主题

112

帖子

118

积分

注册会员

Rank: 2

积分
118
 楼主| 发表于 2009-1-14 15:09:00 | 显示全部楼层

Re:MS 的代码中,为啥要这样使用形参???

刚找了一个在微软上班的朋友咨询了一下,ReallyBigBug 兄弟说的没有错。。。

凡是微软公布了的代码。。。就当成是各种API的使用范例看一下就好,千万别把它的“架构”和“书写方式”当成“标准”或者“典范”。。。。。
因为。。。。MSDN,DirectX这些范例代码。。。都是。。。。实习生写的。。。。

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-1-14 15:19:00 | 显示全部楼层

Re: Re:MS 的代码中,为啥要这样使用形参???

draculamx: Re:MS 的代码中,为啥要这样使用形参???

刚找了一个在微软上班的朋友咨询了一下,ReallyBigBug 兄弟说的没有错。。。

凡是微软公布了的代码。。。...


都跟你说了是实习生写的……我怎么说也是在微软混过一段时间的,这点情况还是知道的……

PS:前一阵去微软推广新技术的Workshop,结果讲演的人管LINQ叫lin-Q,管需求叫需要,如此等等,听得我直起鸡皮疙瘩。不用认为微软每个人都是大牛,其实和我们一样……

20

主题

136

帖子

172

积分

注册会员

Rank: 2

积分
172
发表于 2009-1-15 01:56:00 | 显示全部楼层

Re: MS 的代码中,为啥要这样使用形参???

IDirect3D9Ptr ptrD3D;

IDirect3D9* pD3D = :irect3DCreate9(D3D_SDK_VERSION);
ptrD3D = pD3D;
pD3D->Release();

这个,operator = 操作请求智能接口指针所需接口类型。后续的调用都针对这个智能接口指针来进行。

估计那些“实习生”觉得这样的代码很酷吧,所以也进行了一次 operator =。

相似的还有:

losOLEMETHOD PersistObject::InitNew(IStorage* pStg)
{
        if (_Initialized)
                return CO_E_ALREADYINITIALIZED;

        ptrStg = pStg;
...
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 11:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表