我基本上是将一个const char *值赋给一个字符串。 我正在检查条件并将字符串设置为空为默认值。
在参数化构造函数中,我将字符串设置为空,如下所示
ClassName:: ClassName(X x, string name):X(x), name(){}
一旦我将其用作
,我就将字符串设置为空name="";
上述初始化方法是否正确?
还有将const char *分配给字符串的风险吗?
const char* diag;
string name;
name= diag;
答案 0 :(得分:3)
类std::string
具有类型为char *
的对象的相应构造函数和赋值运算符。相对于此类对象可能出现的唯一问题是初始化程序是空指针时。
考虑到如果声明了这样的变量
const char *name = "";
然后name
不是空指针。它是指向类型为'\0'
的数组的第一个字符(字符const char[1]
)的指针,该数组对应于“空”字符串文字并且具有静态存储持续时间。
如果你写的是
std::strig s( name );
或
std::string s = name;
然后你会得到一个类型为s
的空对象std::string
,因为没有什么可以从“空”字符串文字中复制。
因此,以这种方式声明std::string
类型的对象是没有意义的。写
std::string s;
答案 1 :(得分:0)
在您的示例中没有问题,但通常您需要知道const char *
指向的字符数组是以null结尾的,否则std :: string构造函数将继续读取内存超过阵列结束。