C++构造函数上的一点疑惑的解析

本文深入探讨了C++中临时变量的生命周期特点及其作用域限制,通过实验展示了临时变量仅存在于特定语句范围内,并在其执行结束时自动调用析构函数。同时,分析了编译器对代码的优化行为,解释了为何某些情况下无法直接观察到临时变量的生成过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

课上临时想到的

就是类似第41行的赋值语句,会生成一个临时变量(其它代码不用管)

经过实验发现

这个临时变量的生命周期只限于这个语句,语句结束后就会调用析构函数

而且如果写成

  1. kk::a d=kk::a(b);

则不会看见这个临时变量的生成,估计被编译器给优化掉了

 
  1. #include <iostream> 
  2. using namespace std; 
  3. namespace kk 
  4. int count=1; 
  5. class a 
  6. public
  7.       int counts; 
  8.       a(); 
  9.       ~a(); 
  10.       a(const a&); 
  11.  
  12.  
  13.       }; 
  14.       } 
  15. kk::a::a() 
  16. {      
  17.       counts=kk::count; 
  18.       cout<<"creat the"<<counts<<"th instance"<<"from creat"<<endl; 
  19.       kk::count++; 
  20.        
  21.       } 
  22. kk::a::a(const a& b) 
  23.      counts=kk::count; 
  24.       cout<<"creat the"<<counts<<"th instance"<<" from copy"<<endl; 
  25.       kk::count++;   
  26.           } 
  27. kk::a::~a() 
  28.        cout<<"delete the"<<counts<<"th instance"<<endl; 
  29.        } 
  30. void kkk() 
  31. {   kk::a b; 
  32.     cout<<b.counts<<endl;   
  33.     kk::a c(b); 
  34.     cout<<c.counts<<endl; 
  35.     kk::a d; 
  36.     cout<<d.counts<<endl; 
  37.     d=kk::a(b); 
  38.     d.counts=3; 
  39.      
  40. int main() 
  41.    kkk(); 
  42.    char sss; 
  43.    cin>>sss; 

 

本文出自 “DarkScope从这里开始(..” 博客,请务必保留此出处http://darkscope.blog.51cto.com/4254649/1005164

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值