001 Figuring in C/C++

1. forward declaration

// Function
void fun(int);
   在此之后的代码可以引用fun,而fun的定义必须在某个地方提供。
// Variables may have only forward declaration and lack definition
// During compilation time these are initialized by language specific rules
int foo; //foo might be defined somewhere in this file
extern int bar; //bar must be defined in some other file
   在其他文件中定义的变量必须用extern进行前置声明。
// Type
class A;
struct B;

A fun(A arg); // Pass
A* pa; // Pass, but can't (*pa).member or pa->somefun();
A& ra = *pa; // Pass, but cant't ra; ra.member; ra.somefun();
A a; // Error
   在知道这个类型的完整定义之前,只能用于作为类型的声明,而不能实际的定义变量。

2. POD type 包括以下类型

scalar types
arithmetic types
integral types - [unsigned]char,short,int,long,bool,wchar_t;
  floating types - float,double,long double;
 enumeration typesenumerations
 pointer typespointer to void(void*);
pointer to object/static member data(T*);
pointer to function/static member function(T(*)(...));
 point-to-member typespointer to non-static member data (T C::*);
pointer to non-static member function (T (C::*)(...));
POD class typesAggregate
POD struct types
and
Aggregate
POD union types

None of following as member:
   non-static data(including arrays)of any point-to-member type;
   non-static data(including arrays)of any non-POD class type;
   non-static data of any reference type;
   user-define of copy assignment operator;
   user-define destructor;
Aggreagate refers None of following characteristics:
   user-declared constructor;
   private or protected non-static data members;
   base classes;
   virtual functions;
  
   扩展:
http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html

3. 初始化列表的意义

   列表先于构造函数调用,并调用父类,成员的构造函数进行初始化。(若在列表初始化成员,则无需在{}中再次的赋值初始化,有一定的效能提升)

   初始化列表顺序:父类,成员声明的顺序。

4. Return Value Optimization

struct L
{
   int la;
   L()
   {
      printf("Default Ctor L %p:%d\n", this, la);
   }
   L(int a):la(a)
   { 
      printf("User Ctor L %p:%d\n", this, la);
   }
   L(const L& ot)
   {
      if( this != (&ot)){(*this) = ot;};
      printf("Copy L %p from %p %d\n", this, &ot, la);
   }
   L& operator=(const L&ot)
   {
      la=ot.la; 
      printf("=L %p from %p %d\n", this, &ot, la);
      return (*this);
   }
   ~L()
   {
      printf("~L %p:%d\n", this, la);
   }
};

L fun(L arg)
{
   printf("funin\n");
   return L(arg);
   // or 
   // L tl = arg;
   // return tl;
}
int main()
{
   fun(1);
   printf("funout\n");
   return 0;
}

// one possible output in gcc 3.4.4
/*
User Ctor L 0xbff89990:1 // 参数构造
funin
=L 0xbff899a0 from 0xbff89990 1
Copy L 0xbff899a0 from 0xbff89990 1 // 函数内局部对象拷贝构造
~L 0xbff899a0:1 // 函数内局部对象析构
~L 0xbff89990:1 // 参数析构
funout
*/
   按照道理,这里应该有三个对象的析构才对:函数内局部对象,返回于函数调用栈的临时对象,函数的参数。

   再来看下面的输出

L object = fun(1);
printf("funout\n");
return 0;

// one possible output in gcc 3.4.4
/*
User Ctor L 0xbfe0b3d0:1 // 参数构造
funin
=L 0xbfe0b3e0 from 0xbfe0b3d0 1
Copy L 0xbfe0b3e0 from 0xbfe0b3d0 1 // 函数内局部对象拷贝构造
~L 0xbfe0b3d0:1 // 参数析构
funout
~L 0xbfe0b3e0:1 // object析构
*/

   按照道理,这里应该有四个对象的析构才对:函数内局部对象,返回于函数调用栈的临时对象,函数的参数,对象object。

   RVO是一项编译器相关的代码优化技术,在这里我们可以发现在对object进行拷贝构造时也优化了

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值