C++在类内声明并定义静态成员常量数组(static constexpr const int member[])

本文介绍了在C++23标准下,如何处理静态成员常量数组的声明和定义。当尝试在类内初始化静态常量数组时,编译器会报错。解决这个问题有两种方法:一是将定义移至类外,但这可能影响代码的直观性;二是使用`constexpr`关键字,使得编译器接受在类内的定义。通过这种方式,可以保持代码的整洁,同时避免了编译错误。
摘要由CSDN通过智能技术生成

对于C++23标准,如果我们想要某个类的成员变量能被此类的所有对象访问,且该变量不可修改,那么我们一般会选择将该变量声明为静态常量。例如此代码:

class Decrypter{
    static const int mask = 0x8a;
public:
    void decrypt(){
        ...
    }
};

其中,我们把Decrypter::mask声明为了一个静态常量。对于Decrypter类的所有对象而言,都能访问到同一个mask,节约了内存空间。

然而,如果我们把mask改为一个mask数组,如下列代码所示:

class Decrypter{
    static const int mask[] = {0x8a, 0x2b, 0x3c};
public:
    void decrypt(){
        ...
    }
};

此时编译器就会报错:

 error: in-class initialization of static data member 'const int Decrypter::mask []' of incomplete type

翻译过来就是:“错误:不完整类型的静态成员'const int Decrypter::mask

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值