我有这个C ++类:
class Test
{
private:
string _string;
public:
Test()
{
}
Test(const char *s)
{
Test((string)s);
}
Test(string s)
{
_string = s;
}
operator const char *()
{
return _string.c_str();
}
operator string()
{
return _string;
}
};
如果我在main
" 1234"中使用此代码打印到控制台:
int main()
{
Test test = string("1234");
string s = test;
cout << s << endl;
return 0;
}
但是有了这个,没有打印出来:
int main()
{
Test test = "1234"; // Only change
string s = test;
cout << s << endl;
return 0;
}
唯一的区别是调用哪个构造函数。它表明_string
变量是一个默认的字符串实例,其值为&#34;&#34;但我不明白这是怎么回事。我认为,因为_string
在堆栈上,我所做的任务是安全的。
答案 0 :(得分:3)
此
Test(const char *s)
{
Test((string)s);
}
不链接构造函数。它只是在函数体中创建一个临时对象。你需要的是:
Test(const char *s) : Test(string(s))
{
}