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

    一直不理解C++中的const的写法的区别, 和应该如何记忆, 如

    int* const a;  //a作为指针本身为常量, 不允许改变指向, 定义时需要被赋值
    int const* a;  //a指向内容为常量
    const int* a;  //a指向内容为常量
    

     如此繁琐, 该如何记忆? 又该习惯于何种写法?

      <<C++ Templates>>第一章轻描淡写地提出: "恒定不变的部分"指的是const限定符前面的部分".
    并推荐采用 int const *a 的写法, 而非 const int *a的写法.

      经过反复思考, 应这样理解:

    指针解释:

    int* const a;  //const 修饰 int* , 即 a (指针)本身恒定
    int const* a;  //const 修饰 int , 即 *a (指向的内容) 恒定
    

       而第三种写法 const前面没有任何东西, 虽然是正确的, 但不符合这种规则, 故不推荐使用.

    引用解释:

      基于这样的规则, 考虑如下代码:

    void foo (int const& a)
    void foo (const int& a)
    

       对于以上代码都是正确的, 但第二种不符合规则, 故不推荐使用.

    方法解释:

    class A{...};
    int A::top() const;    // const修饰 top() , 常量方法, 不允许该方法修改成员变量
    

    其他推荐:

      书中同样指出: "对于间隔符, 我们决定在& 符合和参数名至今留出一个空格"

    void foo (int const& x)
    

       借助这种方法, 我们同样强调: 参数类型和参数名称是分离的.

      故推荐如下写法:

    int* a;
    

       而非

    int *a;
    
  • 相关阅读:
    promise的终止调用方法:
    (五)浅谈测试用例
    (四)一个bug的生命周期
    (三)趣谈软件需求分析
    (二)软件测试分类
    (一) 软件测试实质
    【转载—“光荣之路”公众号】Bug预防体系(上千bug分析后总结的最佳实践)
    <MFC>FILE的操作
    <CAN>测试的原理
    <C++>消息循环
  • 原文地址:https://www.cnblogs.com/hauter/p/3776709.html
Copyright © 2011-2022 走看看