那个编译器不符合标准?
#include<iostream>
#include<string>
#define ENDL cout<<endl;
using namespace std;
class A
{
public:
A(){cout<<"一般构造函数,,,";}
A(const A &ob){cout<<"复制构造函数,,,";}
A&operator=(const A &ob){cout<<"====,,,";}
};
A put1(A Ao){return Ao;}
A put2(){A Ao;return Ao;}
main( )
{
A ss,sb;
ENDL;
sb=put1(ss);
ENDL;
sb=put2();
system("pause");
}
在vc2003 和 dev c++ 运行的结果不一样
问题出在这句 A put2(){A Ao;return Ao;}
dev c++ 把 Ao变量直接返回给函数了
而 2003 把Ao 复制给函数生成的临时变量了
dev c++ 相当于 sb=Ao;
而 2003 想当于 sb=(临时变量=Ao); "临时变量=Ao"这里是复制构造 不是赋值操作