变量声明全部放在最前面好呀,还是随用随声明?

tdcq123 2008-03-13 11:21:45
变量声明全部放在最前面好呀,还是随用随声明?
哪种方法好呀,
...全文
877 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
tdcq123 2008-04-04
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 DDGG 的回复:]
可我们公司老大规定要把局部变量全部定义在函数开始处,不能随用随定义,说违背软件工程原则。
[/Quote]
你们老大的做法是错的.看看微软的示例代码吧.
很多随用随定义的.
DDGG 2008-04-03
  • 打赏
  • 举报
回复
可我们公司老大规定要把局部变量全部定义在函数开始处,不能随用随定义,说违背软件工程原则。
Lynn_Ran 2008-03-17
  • 打赏
  • 举报
回复
在需求之前声明,需求之后释放(最晚声明,最早释放)这样是比较好的
星羽 2008-03-17
  • 打赏
  • 举报
回复
c++ 推荐使用后一种,c就只能前一种了
HelloDan 2008-03-17
  • 打赏
  • 举报
回复
我觉得要分情况看吧。如果你是分配,释放,再分配,再释放,都是同一个用处,同时值方面也没有问题,那不如用前一种。

但如果就是一分配,用完释放,且不再分配这样的变量用作同样或相似的用途,那么要用时再分配吧。这个在Effective C++里面有讲的。
xugang_2001 2008-03-17
  • 打赏
  • 举报
回复
舒服就行
mymtom 2008-03-17
  • 打赏
  • 举报
回复
C++ Coding Standards: 101 Rules, Guidelines, and Best Practices
之:
18. Declare variables as locally as possible
fieldwind 2008-03-17
  • 打赏
  • 举报
回复
好像不是 深度探索C++对象模型 把, 是 effective c++吧。呵呵。
这个问题是从c转到c++的人一个比较普遍的问题。
fish6344 2008-03-17
  • 打赏
  • 举报
回复
对于32楼的论述,可参考《深度探索C++对象模型》page240-对象的构造和解构
fish6344 2008-03-17
  • 打赏
  • 举报
回复
请看:

class Fish
{
long a[1000];
public:
Fish(){ //初始化上述a数组;}
~Fish(){}//析构!
void Test(void){ //处理...}
};

long show(long const& _val = 0)
{
Fish _fh;//在函数的开始处,定义对象变量!

if(!_val)
{
_fh.Test();//使用_fh!
return _val;//_fh将在此有析构点1!
}
   //以后的代码并不需要使用_fh: 

//_val不为0时的处理....
return _val;//_fh将在此有析构点2
//N多的return则有N多的_fh析构点....
}

   许多C、VB及其它语言的程序员习惯于在上述类似函数的开始部份声明或定义变量,对于C++则如上注释,show函数是一个非常糟糕的设计!其中的_fh变量只在_val为0时被使用,即是说,无论_val为何值,无论它是否被使用,在定义处编译器一定为它产生构造函数的调用码以建构_fh,其次,函数有多少个返回点,编译器将在各返回点产生析构函数的调用码,栈空间都将对其a[1000]进管理,类似:

long show(long const& _val = 0)
{
Fish _fh;//在函数的开始处,定义对象变量!
_fh.Fish::Fish();//C++伪码(你当然不能也无需这样作).

if(!_val)
{
_fh.Test();//使用_fh!
return _val;//_fh将在此有析构点1!
_fh.~Fish()//C++伪码.
}
   //以后的代码并不需要使用_fh: 

//_val为0时的处理....
return _val;//_fh将在此有析构点2
_fh.~Fish();//C++伪码.
//N多的return则有N多的_fh析构点....
}


一个具有良好素质的C++程序员,应对变量的建构与析构有高的掌控度。理想的情况是,当需要它的时候,它就被创建,不需要它的时候,它应及时消失.例如(修改show的设计):

long show(long const& _val = 0)
{
if(!_val)
{
Fish _fh;//在需要的时候,定义对象变量!
_fh.Test();//使用_fh!
return _val;//_fh将在此有析构点1!
}
   //以后的代码并不需要使用_fh: 

//_val为0时的处理....
return _val;
}

如上,只有_val为0时,才会在if块的栈空间建构_fh,而在if块结束,栈开解的时候,才需要析构_fh。无论_val为除0外的何值,都没有多余的建构与析构动作及其内存开销。完全符合前述设计原则。

所以,把变量声明全部放在最前面,实非我等C++人士所为.

paidfighting 2008-03-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tdcq123 的回复:]
引用 1 楼 wuyi8808 的回复:
后一种。

可是好多人都说,声明放在最前面,才是规范的.
我真是不知所以然了.
[/Quote]

那是c规范,用惯c的人会这样说,c++可以随处声明,并且较受推崇。
独孤过儿 2008-03-17
  • 打赏
  • 举报
回复
有这样的差别是因为C语言里面,所有的变量必须都要在开始的位置声明;而C++里面没有这样的限制...
taodm 2008-03-17
  • 打赏
  • 举报
回复
看《代码大全》。所有编程风格方面的问题,你都可以找到答案。
tdcq123 2008-03-16
  • 打赏
  • 举报
回复
按照公司给你的规范声明好了。
------------------------------------
呵呵,我就是想找规范性的东西呀,我问是就是这个呀?
wuxiaoqqqq 2008-03-16
  • 打赏
  • 举报
回复
按照公司给你的规范声明好了。
tdcq123 2008-03-16
  • 打赏
  • 举报
回复
viena的说法我最信服.
vosov 2008-03-16
  • 打赏
  • 举报
回复
如果是类的成员变量,当然是全部放在最前面了

如果是函数,应该在使用前的最后一刻定义
mabailin 2008-03-16
  • 打赏
  • 举报
回复
正确就行,用多了习惯了就不会再想放前面好还是后面好了
骑蚊子旅游 2008-03-16
  • 打赏
  • 举报
回复
呵。
视情况吧
yql_net 2008-03-16
  • 打赏
  • 举报
回复
后面一种
加载更多回复(18)

65,144

社区成员

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

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