64,662
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using std::cout;
using std::endl;
class A
{
public:
A(int i)
: m_i(i)
{
cout << "A(" << m_i << ")" << endl;
}
~A()
{
cout << "~A(" << m_i << ")" << endl;
m_i = 0;
}
A(const A& a)
: m_i(a.m_i)
{
cout << "A(A(" << m_i << "))" << endl;
}
A& operator=(const A& rhs)
{
cout << "A(" << m_i << ")" << "=A(" << rhs.m_i << ")" << endl;
m_i = rhs.m_i;
return *this;
}
A& operator--()
{
cout << "--(" << m_i << ")" << endl;
--m_i;
return *this;
}
private:
int m_i;
};
A GetA(int i)
{
A a(i);
return a;
}
int main()
{
A la1(1);
A ra2 = --GetA(2);
--ra2;
A ra3 = GetA(3);
A ra4 = GetA(4);
A* pa = &GetA(5);
return 0;
}
string foo()
{
string str="Hello!";
return str;
}
int main()
{
string str="world!";
foo()=str;//可以改变临时变量
return 0;
}
void print_string(const std::string& str)
{
cout<<str<<endl;
}
std::string foo() { return "string"; }
print_string(foo());
print_string("abc"); //这两个调用parameter都是引用的临时对象。
class PodB
{
public:
int m_1;
int m_2;
void Set(int i1, int i2)
{
cout << "Set(" << i1 << "," << i2 << ")"<< endl;
m_1 = i1;
m_2 = i2;
}
int sum() const
{
cout << m_1 << "+" << m_2 << "=" << m_1 + m_2 << endl;
return m_1 + m_2;
}
};
int main()
{
PodB().Set(3, 4); // 按理这里是pod类型则不应该被修改,编译应该错误。但是vc9是正确的
return 0;
}
class T
{
public:
T(int a):i(a){}
~T(){ i = 0; }
void print() const
{
cout<<i<<endl;
}
private:
int i;
};
T foo()
{
return T(5);
}
int main()
{
const T& r = foo();
r.print(); //r引用的临时对象仍然有效。
}