这是代码:
#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的错误吗?