14

重载的构造函数是否有可能以某种方式调用类中的另一个构造函数,类似于下面的代码?

class A {
public:
    A(std::string str) : m_str(str) {}
    A(int i) { *this = std::move(A(std::to_string(i))); }

    std::string m_str;
};

上面的代码有效,但我担心在构造函数中调用它可能会导致未定义的行为。

如果确实如此,您能否解释一下原因并提出更好的替代方案?

4

1 回答 1

27

C++11 引入了委托构造函数

class A
    {
    public:
    std::string m_str;
    A(std::string str) : m_str(str) {} // target constructor
    A(int i) : A(std::to_string(i)) {} // delegating constructor
    };
于 2017-02-08T13:44:35.147 回答