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 写成非内联的就可以解决这个问题~