Const 修饰符以及与函数的关系 C/C++

一. 在 C 语言中主要有如下的情况:

1. const int a;
2. int const a;
3. const int *a;
4. int* const a;
5. int const *a const;
分析:

对于1,2 的作用是一样的,代表 a 是一个常整形数。
对于 3 意思是说 a 是一个指向常整形数的指针,也就是说整形数是不可以修改的,但指针可以。
对于 4 意思是说 a 是一个指向整形数的常指针,也就是说指针指向不可变,但整形数可以变。
对与 5 意思是说 a 是一个指向常整形数的常指针,也就是说指针的指向与整形数都不可改变。

二. 在C ++ 中主要有如下的情况:
1. 用const修饰函数的参数
函数参数类型前加const指明该参数为常量,在函数内部不可改变。

*void func(const int x) {
    //x不可以在内部进行赋值等操作.
}
*

:当参数为引用传递或者指针传递作为输出时,都不能加const**
2.用const修饰函数的返回值
#“值传递” 加const修饰没有任何价值。
#“址传递” 加const修饰,函数返回值只能被赋给加const修饰的同类型指针,或者利用const_case转化为去const的常量。

const int* func(void)                     //函数声明
...
int* a = func();                              //报错
int* c = const_cast<int*>(func()); //正确
const int* b = func()                     //正确

#"

引用返回",引用即为const指针,函数返回引用并加const限定后,函数返回的是地址与地址所存的值都被const修饰的指针,存于临时的外部存储单元中.

const int& func();                                //函数声明
...
    int b = func();                                    //正确,从外部存储单元中赋值给变量
    int& c = func();                                  //错误,试图在同一个地址中即存储变量又存储常量
    int& d = const_cast<int&>(func());    //正确,去const
    const int& e = func();                        //正确

引用返回总结

引用返回一般很少用,但既然选择引用返回,返回的肯定是一个作用域高于函数作用域的变量的引用,毕竟函数作用域下的变量在函数结束后会释放掉(static这里不考虑)引用即为该变量的const指针,既然选择返回指针,就想通过直接利用指针修改该地址下的变量,所以就更没有必要返回const引用,毕竟const引用的返回值不希望对地址所存的值进行修改。引用返回更常用的方式是:

int& func();
...
    int& a = func();

这一可以通过a来改变返回值。

3.const 成员函数
任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误。


```cpp
class test
{
public:
    void func(){}
    int getNum(void) const // const 成员函数
    {
        ++num;     // 编译错误,企图修改数据成员m_num
        func();     // 编译错误,企图调用非const函数
        return num;
    }
private:
    int num;
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值