构造器参数列表的注意事项
#include "stdafx.h"
#include <iostream>
#include <string.h>
using namespace std;
//初始化列表中的初始化顺序,与声明顺序有关,与前后赋值顺序无关
class A
{
public:
A(char * ps)
:name(ps), len(strlen(name.c_str())){}
void dis()
{
cout << len << endl;
}
private:
int len;
string name;
};
int _tmain(int argc, _TCHAR* argv[])
{
A a("china");
a.dis();
return 0;
}
#if 0
运行结果错误
因为在private中 len先声明 name后申明 所以在初始化列表中
会先进行len的初始化 后进行name的初始化 而先进行len初始化
时name的值未知(形成野指针) 所以得不出正确结果
更改方法:
1.将 private中 len和name的申明顺序颠倒
2.将构造器中改成
A(char * ps)
:name(ps)
{
len(strlen(name.c_str())); //将其放入调用函数中
}
#endif