关于Const参数大家有什么习惯?

fibbery 2008-08-04 03:53:58
对于指针和引用作为参数传递给方法或者函数时,一般如果是IN参数,那么会使用const语义来加以限制;在C++编程规范中说,如果参数是传值的,就不要使用const修饰(顶级const)。

而我的个人习惯,只要是函数里面不会被修改的参数,一般我都使用const来通知使用者,我觉得这个习惯很好,但是看了上面的那句话后,总感觉心里不是滋味!
所以想问问大家有什么习惯,为什么?

顺便散点分!
...全文
355 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
sico_ 2008-08-06
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 DarknessTM 的回复:]
const的习惯还在慢慢养成

不过有时候一层层调用下来,发现最后一层需要修改值,结果编译器给出一个不能转化……

很囧的一层层把const的去掉……
[/Quote]
const_cast
guzhilei1986 2008-08-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 babyvox1999 的回复:]
传值是复制的,改动不影响原来的
[/Quote]
极度同意
e_sharp 2008-08-05
  • 打赏
  • 举报
回复
对于指针和引用作为参数传递给方法或者函数时,一般如果是IN参数,那么会使用const语义来加以限制;在C++编程规范中说,如果参数是传值的,就不要使用const修饰(顶级const)。

---------------------

还是按照这个做吧

IN参数,应该加const
传值,const没有必要
fallening 2008-08-05
  • 打赏
  • 举报
回复
这样的话,加一个引用就是
yc_8301 2008-08-05
  • 打赏
  • 举报
回复
可以参照一下,希望对LZ有帮助。。
http://blog.csdn.net/yc_8301/archive/2007/10/08/1814822.aspx
赵Andy 2008-08-05
  • 打赏
  • 举报
回复
顶一下。
Learn-anything 2008-08-05
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 yc_8301 的回复:]
可以参照一下,希望对LZ有帮助。。
http://blog.csdn.net/yc_8301/archive/2007/10/08/1814822.aspx
[/Quote]
wayne1986 2008-08-05
  • 打赏
  • 举报
回复
传值又不会修改到原值,所以一般不加,而指针和引用都加
loveeve 2008-08-05
  • 打赏
  • 举报
回复
一是避免意外改值,二是方便阅读
wonsoft 2008-08-05
  • 打赏
  • 举报
回复
不变的就const一把,关键看各人习惯,不要管别人怎么哦,否则你将寸步难行了。
pbmichael 2008-08-05
  • 打赏
  • 举报
回复
如果是内置类型,比如int型,一般使用传值,也不会影响效率!
而对于用户自定义类型,比如用户自定义了一个类:
class A
{
public:
A(){...}
~A(){...}
A(const A& rhs){...}//拷贝构造函数
A& operator=(const A& rhs){...}//赋值函数
private:
...
};

一个单独的类还好说,如果有多层继承的话,在用一个子类对象进行值传递时,会调用多次拷贝构造函数,降低效率!
因此,在以自定义类型做参数时,做好是const引用传递;
还有,传值后,使用的是副本,因此不用const修饰!
五号智能 2008-08-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 fibbery 的帖子:]
对于指针和引用作为参数传递给方法或者函数时,一般如果是IN参数,那么会使用const语义来加以限制;在C++编程规范中说,如果参数是传值的,就不要使用const修饰(顶级const)。

而我的个人习惯,只要是函数里面不会被修改的参数,一般我都使用const来通知使用者,我觉得这个习惯很好,但是看了上面的那句话后,总感觉心里不是滋味!
所以想问问大家有什么习惯,为什么?

顺便散点分!
[/Quote]
如果参数是传值的,就不要使用const修饰(顶级const)。

传值还干嘛用const? const只是为了不修改in参数。传值的东西你不加const它也不会修改吧,为什么还要多此一举?
可能您是用“传引用”用的太多,而乎略了还有传值这一种普通用法。

薛定谔之死猫 2008-08-04
  • 打赏
  • 举报
回复
呵呵,从来不用,因为不做SDK,自己写的函数自己使用
foliage_ 2008-08-04
  • 打赏
  • 举报
回复
up!
一般来说,经验来了的话,这些就像语言的语法一样熟练了,感觉而已/..
dwen20 2008-08-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bluejing0 的回复:]
做为我个人习惯来说,
如果传递的是值传递,一般不会加const加以限制,如果是传递引用的入参,会加以const。
[/Quote]
Maxwell 2008-08-04
  • 打赏
  • 举报
回复
一般是内置类型不加,自定义类型首选const&。
JIGSONG 2008-08-04
  • 打赏
  • 举报
回复
参数是传值的,意味着靠参数传递信息,干嘛用const修饰?
如果被调函数只需要参数的值,最好还是用const,这样一来对实参的类型也有一定的限制。

[Quote=引用楼主 fibbery 的帖子:]
对于指针和引用作为参数传递给方法或者函数时,一般如果是IN参数,那么会使用const语义来加以限制;在C++编程规范中说,如果参数是传值的,就不要使用const修饰(顶级const)。

而我的个人习惯,只要是函数里面不会被修改的参数,一般我都使用const来通知使用者,我觉得这个习惯很好,但是看了上面的那句话后,总感觉心里不是滋味!
所以想问问大家有什么习惯,为什么?

顺便散点分!
[/Quote]
elegant87 2008-08-04
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 ndsl3334 的回复:]
节选自Effective C++

尽量用“传引用”而不用“传值”
“通过值来传递一个对象”的具体含义是由这个对象的类的拷贝构造函数定义的。这使得传值成为一种非常昂贵的操作。
一定要对通过值来传递对象所造成的开销有所警惕
为避免这种潜在的昂贵的开销,就不要通过值来传递对象,而要通过引用:

const student& returnstudent(const student& s)
{ return s; }

这会非常高效:没有构造函数或析构函数被调用,因为…
[/Quote]

对那些不需要改变的值或者事函数,用const修饰,很好的习惯!
勇敢的天牛 2008-08-04
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 Carbuncle619 的回复:]
这种的我是认为最好是复制一份,你里面把值改掉了,不知道外部怎么处理的,由哪里来的,可能会出现一些未知错误的。

引用 24 楼 Lx_china 的回复:
C/C++ code long MakePath(char* path)
{
char* p = path, ch;
while(*p)
{
if(*p != '\\' && *p != '/')
{
p++;
continue;
}
ch = *p…
[/Quote]

晕,我只是改动了一下,又改回去了,对于外部,内容根本没有变化
复制会带来额外的内存开销,和时间开销,我只是举个例子而已
richbirdandy 2008-08-04
  • 打赏
  • 举报
回复
up
加载更多回复(27)

64,637

社区成员

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

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