vc++(debug mode)和g++有不同的效果,用这段代码
测试.hh
class Test
{
public:
int a, b, c;
Test(int a, int b, int c) : a{ a }, b{ b }, c{ c } { }
Test& operator++();
Test operator++(int);
};
std::ostream& operator<<(std::ostream& os, const Test& t);
测试.cc
std::ostream& operator<<(std::ostream& os, const Test& t)
{
os << "{ " << t.a << ',' << t.b << ',' << t.c << " }";
return os;
}
Test Test::operator++(int)
{
Test temp{ *this };
operator++();
return temp;
}
Test& Test::operator++()
{
++a; ++b; ++c;
return *this;
}
主文件
Test t{ 1,2,3 };
std::cout << t << '\n'
<< t++ << '\n'
<< t;
在 vc++ 中,执行的结果是
{ 2,3,4 }
{ 1,2,3 }
{ 2,3,4 }
但在 g++ 中是
{ 1,2,3 }
{ 1,2,3 }
{ 2,3,4 }
那么,vc++ 中是否存在编译器错误或我没有学到的东西。