Er_HU

但求风浪,莫问前程。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

常见用法示例

变量申明

    const declaration

//E0137: expression must be a modifiable lvalue
//E0144: a value of type "const int *" cannot be used to initialize an entity of type "int *"

    //const value
    int var1 = 1;                       //OK
    const int var2 = 2;                 //OK
    int const var3 = 3;                 //OK

    var1 = 10;                          //OK
    var2 = 10;                          //E0137
    var3 = 10;                          //E0137

    int* pVar1 = &var1;                 //OK
    int* pVar2 = &var2;                 //E0144

    *pVar1 = 20;                        //OK

    int const* pVar3 = &var1;           //OK
    int const* pVar4 = &var2;           //OK
    const int* pVar5 = &var3;           //OK

    *pVar3 = 10;                        //E0137
    pVar3 = pVar1;                      //OK

    //const ptr
    int* const pVar6 = &var1;           //OK
    *pVar6 = 20;                        //OK
    pVar6 = pVar1;                      //E0137
    
    //const value and const ptr
    int const* const pVar7 = &var1;     //OK
    *pVar7 = 20;                        //E0137
    pVar7 = pVar1;                      //E0137

补充:对于函数形参,同上。

函数声明

    member-function const

声明成员函数为 const 意味着该函数被禁止修改调用它的对象,包括:

  • 无法修改任何非静态的数据成员
  • 调用任何非静态成员函数。

关键字 const 必须同时标记到声明和实现。

非类成员函数无法声明为 const

C and C++ const 的区别

当在 C 源码中声明 const 变量:

const int i = 2;

在其他模块中使用:

extern const int i;

同样的行为在 C++ 源码中定义:

extern const int i = 2;

如果想要在 C 模块中调用 C++ 模块的变量,那么需要在 C++ 中按如下定义变量以防止名称被 C++ 编译器破坏:

extern "C" const int x = 10;

使用 const 的场景

只要允许,尽可能地使用 const,更进一步,尽可能使用 constexpr

posted on 2021-02-07 16:32  Er_HU  阅读(128)  评论(0编辑  收藏  举报