使用const char *作为参数链接构造函数会产生意外结果

时间:2014-12-03 19:03:09

标签: c++ string

我有这个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在堆栈上,我所做的任务是安全的。

1 个答案:

答案 0 :(得分:3)

Test(const char *s)
{
    Test((string)s);
}

不链接构造函数。它只是在函数体中创建一个临时对象。你需要的是:

Test(const char *s) : Test(string(s)) 
{
}