(3)用const修饰函数的参数和函数的返回值

(3)用const修饰函数的参数和函数的返回值

在定义函数时常用到const,主要是用来修饰参数和返回值。这样做的目的是让编译器为程序员做变量只读性的检查,以使程序更加健壮。下面是一个例子。

1. #include <iostream>

2. 

3. void disp1(const int &ri)

4. {

5.     std::cout<<ri<<std::endl;

6. }

7. void disp2(const int i)

8. {

9.     std::cout<<i<<std::endl;

10. }

11. const int disp3(const int &ri)

12. {

13.     std::cout<<ri<<std::endl;

14.     return ri;

15. }

16. int& disp4(int &ri)

17. {

18.     std::cout<<ri<<std::endl;

19.     return ri;

20. }

21. const int& disp5(const int &ri)

22. {

23.     std::cout<<ri<<std::endl;

24.     return ri;

25. }

26. 

27. int main()

28. {

29.     int n = 5;

30.     disp1(n);

31.     disp2(n);

32.     disp3(n);

33.     disp4(n)=6;

34.     disp5(n);        //disp5(n)=6;是错误的

35.     return 0;

36. }

复制代码

程序的输出结果为:

5

5

5

5

6

阅读上面的程序要注意这样几个要点:

用const修饰函数的参数时,主要将被引用对象或被指向的对象声明为常量如果是将传值调用的形参声明为常量,则没有多大实用价值。在上例中,void disp2(const int i)这样的声明就没有多少意义,因为形参i是否在函数体内改变,并不影响实参的值,所以将i声明为常量虽然在语法上没有错,但没有实用价值。不但如此,如果同时定义一个相似的(没有用const修饰参数)的函数,还会引起重定义错误,如下面的程序。

1. #include<iostream>

2. 

3. void f(int i)

4. {

5.     std::cout<<"int"<<std::endl;

6. }

7. void f(const int i)

8. {

9.     std::cout<<"const int"<<std::endl;

10. }

11. 

12. int main()

13. {

14.     f(3);

15.     int num = 6;

16.     f(num);

17. }

复制代码

在这个程序当中,定义了两个名为f的函数,一个函数原型为void f(int),另一个函数原型为void f(const int),由于都是采用传值调用,而任意的整型表达式的值都可以传送给int型参变量,也可以传送给const int型参变量,所以这两个函数之间并不构成重载,而是发生重定义错误。

当函数的返回值是一个普通数据,而不是引用时,用const修饰函数返回值也没有多少意义。因为这时函数的返回值是一个非左值,本来就不能够改变其值。在例4中,const int disp3(const int &ri)对返回值的const限定是多余的。

如果函数的返回值为引用,那么用const修饰返回值可以阻止对被引用对象的修改。例如disp5(n)=6;是错误的,原因是函数disp5()的返回值被声明为常引用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值