zoukankan      html  css  js  c++  java
  • C++ const 理解

     转载自:https://www.cnblogs.com/jiabei521/p/3335676.html

    如果函数需要传入一个指针,面试官可能会问是否需要为该指针加上const,把const加在指针不同的位置有什么区别;如果写的函数需要传入的参数是一个复杂类型的实例,面试官可能会问传入值参数或者引用参数有什么区别,什么时候需要为传入的引用参数加上const。 const是用来声明一个常量的,当你不想让一个值被改变时就用const,const int max和int const max 是没有区别的,都可以。不涉及到指针const很好理解。一旦涉及到指针,则比较容易出问题。

    如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向的对象为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量

    因此,[1]和[2]的情况相同,都是指针所指向的内容为常量(const放在变量声明符的位置无关),这种情况下不允许对内容进行更改操作,如不能*a = 3 ;[3]为指针本身是常量,而指针所指向的内容不是常量,这种情况下不能对指针本身进行更改操作,如a++是错误的,但是*a=3 是允许的;[4]为指针本身和指向的内容均为常量。

    实践

    int b = 100; 
        const int *a1 = &b; //[1] 与[2]相同 指针指向的对象为常量
        int const *a2 = &b;    //[2] 
        int* const a3 = &b;    //[3]            指针本身是常量
        const int* const a4 = &b;    //[4]    指针本身和指向的内容均为常量
        
        *a1 = 100; //错误,指针指向的对象为常量,不可变更
        *a3 = 100; //正确,指针本身是常量,可以更改指针指向的内容
        (*a3)++; //正确,指针本身是常量,不可更改
        a3++;    //错误,指针本身是常量,不可更改
        *a3++; //错误,同上
        *a4 = 100;    //错误
        a4++;//错误
        *a4++;//错误
        (*a4)++;//错误

  • 相关阅读:
    iOS中的HTTPS
    HTTPS抓包之Charles
    组件化开发的一些思考
    Xcode 调试技巧
    iOS崩溃日志分析
    iOS依赖库管理工具之Carthage
    13.类的关系总结
    12.组合(Composition)
    11.聚合(Aggregation)
    10.关联(Association)
  • 原文地址:https://www.cnblogs.com/lixuwu/p/9452457.html
Copyright © 2011-2022 走看看