设为首页 加入收藏

TOP

C++的临时对象(二)
2011-12-28 12:57:56 来源: 作者: 【 】 浏览:1819
Tags:临时 对象
   二,类型转换生成的临时对象。
  我们在做类型转换时,转换后的对象通常是一个临时对象。编译器为了通过编译会创建一起我们不易察觉的临时对象。再次修改如上main代码:
  void main()
  { CTemp tm(10,20),sum;
  sum = 1000;
  printf("Sum = %d n",tm.GetSum(sum));
  } -----------------------------------------------------------
  Output:
  Construct function!
  a = 10
  b = 20
  Construct function!
  a = 0
  b = 0
  Construct function!
  a = 1000
  b = 0
  Sum = 1000
  ----------------------------------------------------------
  main函数创建了两个对象,但输出却调用了三次构造函数,这是为什么呢
  关键在 sum = 1000;这段代码。本身1000和sum类型不符,但编译器为了通过编译以1000为参调用构造函数创建了一下临时对象。
  解决办法:
  我们对main函数中的代码稍作修改,将sum申明推迟到“=”号之前:
  void main()
  { CTemp tm(10,20);
  CTemp sum = 1000;
  printf("Sum = %d n",tm.GetSum(sum));
  } ----------------------------------------------------------
  Output:
  Construct function!
  a = 10
  b = 20
  Construct function!
  a = 1000
  b = 0
  Sum = 1000
  ----------------------------------------------------------
  只作了稍稍改动,就减少了一次临时对象的创建。
  1,此时的“=”号由原本的赋值变为了构造。
  2,对Sum的构造推迟了。当我们定义CTmep sum时,在main的栈中为sum对象创建了一个预留的空间。而我们用1000调用构造时,此时的构造是在为sum预留的空间中进行的。因此也减少了一次临时对象的创建。
  
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++如何获取文件属性 下一篇C++分号的使用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: