用sizeof获得class里面 static数组的大小.....

    class AboutString {
        string str;
    public:
        explicit AboutString(const string& str1 = "haha") :str(str1) {};
        void print() const{
            cout << str << endl;
        }
    };
    class SecondString {
        static AboutString astr[];
        const static AboutString astr_const[];
    public:
        static void show_data(); 
    };
    AboutString SecondString::astr[] = { AboutString("as1"),AboutString("as2"),AboutString("as3") };
    const AboutString SecondString::astr_const[] = { AboutString("as1_const"),AboutString("as2_const"),AboutString("as3_cosnst") };

    void SecondString::show_data() {
        for (int i = 0; i < sizeof(astr) / sizeof(*astr); i++) {
            astr[i].print();
        }

        for (int i = 0; i < sizeof(astr_const) / sizeof(*astr_const); i++) {
            astr_const[i].print();
        }
    }

这里有坑。

        static AboutString astr[];
        const static AboutString astr_const[];

这段代码只是变量的声明,并没有给变量赋初始值,自然也没有分配到静态存储区域。

static void show_data(); 

如果将show_data 写成内联,会悲剧。由于没有定义,编译器还不知道两个静态变量的大小。sizeof(astr)会取不到值。

将show_data 写成非内联的就可以解决这个问题~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值