GCC / Clang不做临时对象

时间:2019-04-01 12:32:54

标签: c++

class Sample {
private:
    int         data = 0;
    std::string name = nullptr;

public:
    Sample(int m_data, const std::string& pName) : data(m_data), name(pName) {
        std::cout << "Sample(int, const std::string&): " << name << "\n";
    }

    Sample(const Sample& rhs) : data(rhs.data), name(rhs.name) {
        std::cout << "Sample(const Sample&): " << name << "\n";
    }

    ~Sample() {
        std::cout << "~Sample(): " << name << "\n";
    }
}

Sample TestFunc(int param) {
    Sample a(param, "a");

    return a;
}

我制作了一个这样的类,并在main()中调用了TestFunc(20);。然后出现以下输出。

Sample(int, const std::string&): a
~Sample(): a

我期望会创建一个临时Sample对象,因此应调用复制构造函数,但不是。

此代码已使用GCC和Clang进行编译,并已通过MSVC进行了复制构造,这正是我所期望的。

Sample(int, const std::string&): a
Sample(const Sample&): a  // temporary object constructor
~Sample(): a
~Sample(): a  // temporary object destructor

GCC / Clang有什么问题?

0 个答案:

没有答案