社区
C++ 语言
帖子详情
变量声明全部放在最前面好呀,还是随用随声明?
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)
看到这类代码,别再说你不认识了!手把手带你认识初阶结构体(结构体类型的
声明
、初始化、成员访问与传参,全在这篇文章里)
【手把手带你入门】结构体结构体类型的
声明
结构的基础知识结构的
声明
结构成员的类型结构体
变量
的定义和初始化结构体成员访问结构体传参 小伙伴们大家
好呀
!又见面了~没错我就是每天努力码字努力爆肝的勤奋小码农。 看了我的文章,记得给我点个赞留下你的小脚印呀! 今天我们来讲讲结构体。 结构体类型的
声明
结构的基础知识 首先我们先来认识一下结构的概念: 结构是一些值的集合,这些值称为成员
变量
。结构的每个成员可以是不同类型的
变量
。 这里的结构指的就是结构体。 那么结构体是怎么来的呢? 现在的我们已经学了很多种类型,
开启前端新篇章-------JavaScript
目录 一、什么是编程语言 二、JavaScript介绍 1.HTML/CSS/JS的关系: 2.JavaScript 组成 3.JS三种书写位置 4.JS输入输出语句 三、浏览器执行JS简介 四、Javascript
变量
1.什么是
变量
2.
变量
的使用 3.
变量
语法扩展 4.
变量
的命名规范 5.交换两个
变量
值 五、Javascript数据类型 1.为什么需要数据类型 2. JS中简单数据类型 3. typeof检测
变量
数据类型 4.数据类型转...
C++类和对象上篇
哈喽!大家
好呀
,咱们又见面了。上期我们也是触摸到了C++的大门,那么这期我们就要开始慢慢的推开这扇大门了。也希望和大家一起坚持学习下去。//类体:由成员函数和成员
变量
组成 };class为定义类的关键字、className是这个类的名字、{}为类的主体、注意:{}后面的;不能省略。类体中的内容称为类的成员,类里的
变量
叫作成员
变量
、类里的函数叫作成员函数。类定义的两种方式:
声明
和定义都
放在
类内,但需要注意:在类里定义的成员函数有可能会被编译器当作内联函数处理。
Python基础!
Python 与其他语言的区别:Python:
变量
相当于_标签_其他语言:
变量
相当于_容器_先赋值后使用print(str)
变量
名 = (元素1, 元素2, ...)# 定义空元组
变量
名 = () # 方式1
变量
名 = tuple() # 方式2# 定义只有一个元素的元组,后面必须有逗号,否则就不是元组类型单引号双引号name = """ 黑马程序员 """可实现多行字符串的输出若不用
变量
去接收,则作为多行注释使用
变量
名 = {元素1, 元素2, ...}# 定义空集合。
初识类和对象
初识类和对象类和对象初识类和对象创建对象类和对象的内存图类的组成属性/成员
变量
成员方法递归调用方法重载可变参数作用域构造器this关键字相关面试题 大家
好呀
!我是小笙!前几天被培训班的老师考察基础,发现漏洞还是有很多的,我想进一步学习java基础,所以我跟着韩老师学Java,以下是我的笔记 类和对象 概念:类是自定义的数据类型,对象就是一个具体的实例 <==> int 和 100 的关系 对象【属性,行为】 初识类和对象 创建对象 // 先
声明
后创建 Car car; car
C++ 语言
65,144
社区成员
250,537
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章