当前位置:  开发笔记 > 编程语言 > 正文

使用emplace_back与push_back的奇怪行为

如何解决《使用emplace_back与push_back的奇怪行为》经验,为你挑选了0个好方法。

这是代码:

#include 
#include 
#include 
#include 
#include 

class Date
{
public:
    Date(int year, int month, int day) : year(year), month(month), day(day) {}
    Date(const Date &d) : year(d.year), month(d.month), day(d.day) {}
    std::string to_string() {
        std::stringstream ss;
        ss << std::setfill('0') << std::setw(4) << year << '-' << std::setw(2) << month << '-' << day;
        return ss.str();
    }
private:
    int year, month, day;
};

int main()
{
    std::vector vd;
    vd.emplace_back(2017, 1, 13);
    vd.emplace_back(vd[0]);
    std::cout << vd.back().to_string() << "\n";
}

当我使用VS2015(编译器19.00.24215.1)编译并运行它时,它打印废话就像20750440-20709568-13.当我使用g ++ 4.8.4编译它时,它2017-01-13按预期打印.但是,如果我替换vd.emplace_back(vd[0])vd.push_back(Date(vd[0])),则2017-01-13使用VS2015和g ++进行打印.

我以前认为vector::emplace_back(args)在功能上等同于vector::push_back(Ctor(args)),可能避免复制?他们为什么在这里产生不同的行为?这是VS2015的错误吗?

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有