C++ const的一些理解

条目1: 头文件中的const全局变量

C++头文件中,定义全局const变量默认是static的, 所以在头文件中定义全局const变量, 前面不需要添加static防止重复定义, 即使添加了也不会出错—-没有副作用.

条目2: 勿要在头文件中定义”非const”及”static 非const”全局变量

C++头文件, 定义全局非const变量, 如果不添加static, 则会出现重复定义链接错误, 解决方法: 全局非const变量添加static但是, 但是, 你丫的在头文件中定义全局非const变量, 你想干啥, 对于任何在头文件中定义非const全局变量的程序员, 你都可以在他屁股上狠狠的踹上一脚, 告诉他never, never, never do this.

条目3: 头文件中定义全局函数

头文件中定义全局函数, 会出现”重复定义链接错误”, 解决方法:
(1) 将全局函数声明为”静态全局函数”, 即: 在函数前面添加static关键字
(2) 将全局函数定义为”内联函数”, 即:在函数前面添加inline关键字

条目4: Class(包括struct)中的const

类中的const与全局const不一样:
(1) 类const成员变量, 其与全局const变量不同. 对于const成员, 每个类实例都包含一份, 其值可能会不同.
而全局const变量只有一份
(2) 类const成员变量, 严格意义上将, 不是字面上的const(编译期常量), 而是类似C#中的readonly, 在运行期,
类实例构造函数”初始化列表”中初始化, 初始化后, 在类实例的声明周期类, 此const成员变量值无法修改.
(3) 类static const变量才与全局const变量意义相同, 类static const变量属于类成员, 而不是类实例成员.

类static const变量声明、定义有两种方式:
a.

class Test
    {
        static const int ConstNum = 5;
    }

    int main()
    {
        Test t;
        cout << t::ConstNum << '\n';    // 5
    }

b.

class Test
    {
        static const int ConstNum;
    }

    //static const Test::ConstNum = 5;  // 错误写法, 不能添加static
    const int Test::ConstNum = 5;


    int main()
    {
        Test t;
        cout << t::ConstNum << '\n';    // 5
    }

条目5:

摘录:

const全局常量才是真正意上的常量,而局部const常量其不是真正意义上的常量。
const全局常量存储空间在文本常量区上分配,而局部的,其存储空间在栈区分配。

故const全局常量不能被修改。

个人理解:
const全局常量及局部static const常量才是真正意上的常量,而局部非static const常量其不是真正意义上的常量。
const全局常量存储空间在文本常量区上分配,而局部的,其存储空间在栈区分配。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值