c++ 函数参数部分里的 const 修饰是什么意义?

 我来答
刀刀见血封喉
推荐于2018-03-09 · TA获得超过282个赞
知道小有建树答主
回答量:166
采纳率:0%
帮助的人:120万
展开全部
-----------用 const 修饰函数的参数
如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引
用传递”,都不能加 const 修饰,否则该参数将失去输出功能。
const 只能修饰输入参数:
1. 如果输入参数采用“指针传递”,那么加 const 修饰可以防止意外地改动该指针,起到保护作用。
例如 StringCopy 函数:
void StringCopy(char *strDestination, const char *strSource);
其中 strSource 是输入参数,strDestination 是输出参数。给 strSource 加上 const 修饰后,
如果函数体内的语句试图改动 strSource 的内容,编译器将指出错误。
2. 如果输入参数采用“值传递”,由于函数将自动产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加 const 修饰。
例如不要将函数 void Func1(int x) 写成 void Func1(const int x)。 同理不要将函数 void
Func2(A a) 写成 void Func2(const A a)。其中 A 为用户自定义的数据类型。
3. 对于非内部数据类型的参数而言,象 void Func(A a) 这样声明的函数注定效率比较低。因为函数体内将产生 A 类型的临时对象用于复制参数 a,而临时对象的构造、复制、析构过程都将消耗时间。
为了提高效率,可以将函数声明改为 void Func(A &a),因为“引用传递”仅借用一
下参数的别名而已,不需要产生临时对象。
但是函数 void Func(A &a) 存在一个缺点: “引用传递”有可能改变参数 a,这是我们不期望的。解决这个问题很容易,加 const 修饰即可,因此函数最终成为 void Func(const A &a)。
以此类推,是否应将 void Func(int x) 改写为 void Func(const int &x),以便提高效率?
完全没有必要,因为内部数据类型(如int、float、double等)的参数不存在构造、析构的过程,而复制也非常快,
“值传递”和“引用传递”的效率几乎相当。

问题是如此的缠绵,个人总结如下:
1) 对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const 引用传递”,目的是提高效率。例如将 void Func(A a) 改为 void Func(const A &a)。
2) 对于内部数据类型的输入参数,不要将“值传递”的方式改为“const 引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。例如 void Func(int x) 不应该改为 void Func(const int &x)。

不知楼主满意不.
hwd0312
推荐于2016-05-20 · TA获得超过4336个赞
知道小有建树答主
回答量:1043
采纳率:100%
帮助的人:170万
展开全部
c++ 函数参数部分里的 const 修饰使用来 限定函数的传递值参数:
比如说:void function(const int Var); 中
const限定传递过来的参数在函数内不可以改变,也就是说不能在函数内对var进行修改,但是可以取它的值进行使用。
const 限定符,它把一个对象转换成一个常量。const与define。两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内联函数(Inline)。const和define定义的常量可以放在头文件里面。(小注:可以多次声明,但只能定义一次)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-04-15
展开全部
不需要,只有在返回类型是指针或者引用类型的时候才有意义,表示不允许通过这个返回的指针或者返回的引用去修改数据。
有时候也用于返回类型是自定义类型的情况,不允许对返回值再直接赋值,但这种用法只在理论上有意义。
另外,团IDC网上有许多产品团购,便宜有口碑
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chisely
2011-04-13
知道答主
回答量:12
采纳率:0%
帮助的人:0
展开全部
防止函数内部改变传入地址参数指向的内容
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
孤松独海
推荐于2017-11-24 · TA获得超过1513个赞
知道大有可为答主
回答量:1220
采纳率:0%
帮助的人:493万
展开全部
确保是常数类型,防止在函数里面修改了调用者
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式