turing-complete 2011-04-21 14:33
浏览 175
已采纳

谁能给一个官方的答案

问题如下,有经历的人自然懂得在下的问题
[code="c++"]
#include

using std::cout;
using std::endl;

class Test
{
public:
static int counter;
char identifier;
public:
inline Test(char para){ identifier='A'+(Test::counter++);cout<<"invoking constructor : "<identifier<<endl; }

inline Test(Test &para){ identifier='A'+(Test::counter++);cout<<"invoking copy constructor "<"<<identifier<<endl; }

inline ~Test(){ cout<<"invoking deconstructor "<identifier<<endl; }

inline Test operator =(Test &para){ cout<<"invoking operator = "<<endl;return para;}
};

int Test::counter=0;

Test f(Test para){ cout<<"invoking function f(Test) "<<endl; return para; }

int main()
{
//cout<<"============ 1 ==============="<<endl;
//Test a(1);
//cout<<"============ 2 ==============="<<endl;
Test b(f(Test(2)));//此步 临时变量的作参数 和 函数返回值 都没有调用复制构造函数
//cout<<"============ 3 ==============="<<endl;
//a=f(a);//对 内存变量的操作 则 传参数 和 函数返回值 都调用了复制构造函数
//cout<<"=========== over ============="<<endl;
return 0;
}
[/code]

IDE:VS2008;编译器版本:VC9.0

  • 写回答

1条回答 默认 最新

  • 萧鼐 2011-04-22 08:45
    关注

    [code="java"]Test b(f(Test(2)));//此步 临时变量的作参数 和 函数返回值 都没有调用复制构造函数[/code]
    这个是因为编译器优化的原因。详见:
    http://msdn.microsoft.com/zh-cn/library/ms364057%28VS.80%29.aspx

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?