const的不同位置的用法

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/baidu_35679960/article/details/83504018
const int fun(const int var) const;

1、 第一个const:函数的返回值是const。

此处返回const值,意思指返回的原函数里的变量的初值不能被修改,但是函数按值返回的这个变量被制成副本,能不能被修改就没有了意义,它可以被赋给任何的const或非const类型变量,完全不需要加上这个const关键字.但这只对于内部类型而言(因为内部类型返回的肯定是一个值,而不会返回一个变量,不会作为左值使用),对于用户自定义类型,返回值是常量是非常重要的 [2].

#include <iostream>
using namespace std;

class A
{
public:
    int _a;
    A(int a):_a(a){}
    friend const A operator +(const A& lft,const A& rgt)
    {
        return A(lft._a + rgt._a);
    }
};

int main()
{
    A a(1),b(3),c(7);
    a + b = c; //error: passing 'const A' as 'this' argument discards qualifiers [-fpermissive]|
    A result = a + b + c; // 11
    cout << result._a << endl;
    return 0;
}
  • + 运算符重载加const 约束 对 a+b+c 这样的运算没有影响,因为a+b 运算的结果是const ,但对其只是只读操作,会创建一个新的 A 类返回。

2、第二个const:函数参数是const。传递过来的参数var在函数内不可以改变,一般我们的只读参数需要使用const来加以保护;

3、第三个const:该函数是const。编译器会对这个函数进行检查,在这个函数中的任何试图改变成员变量和调用非const成员函数的操作都被视为非法。
如:

int Stack::functiont(void)  const 
{ 
   ++ m_num; // 编译错误,企图修改数据成员 m_num 
   Pop();  // 编译错误,企图调用非const 函数 
   return m_num; 
 }

参考:
[1] c++函数返回类型什么情况带const
[2] C++中const的不同位置的用法

猜你喜欢

转载自blog.csdn.net/baidu_35679960/article/details/83504018
今日推荐