C++返回一个临时对象的问题

来源:百度知道 编辑:UC知道 时间:2024/06/28 03:29:49
#include <iostream>
using namespace std;

class Cat
{public:
Cat();
Cat(int initialage);
~Cat() {}
Cat(Cat &); //复制构造函数声明
int GetAge() const {return itsAge;}
void SetAge(int age) {itsAge=age;}
Cat function(); //“问题”函数声明
private:
int itsAge;
}; //;类声明结束

Cat::Cat():
itsAge(1)
{}

Cat::Cat(int initialage): //Cat::Cat(int,int)
itsAge(initialage)
{}

Cat::Cat(Cat &)
{
cout<<"Copy constructor called...\n";
}

Cat Cat::function()
{Cat Black;
return Black;
}

int main()
{
Cat White(20);
cout<<"White is "<<White.GetAge()<<" years old.\n";
Cat Red=White.function();
//在VC上可以编译通过,但在DC上就报错。
//VC一向以善于忽略错误而闻名,所以我想知道究竟错在哪里?

return 0;
}

临时变量是const类型的,不能把它赋给引用。
string somefamousauthor()
{return "aaa";}
......
string &s=somefamousauthor()
有的编译器会报错,因为不能转换const string到string&,也不能把他传给参数是string&的函数。如果函数参数不是引用类型的那么就会创建副本,使用的不是临时变量了。

具体错误怎么不贴出来?