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

来源:互联网 发布:r语言读取大数据csv 编辑:程序博客网 时间:2024/06/05 04:58
    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 写成非内联的就可以解决这个问题~

原创粉丝点击