2016.4.11 最近看书遇到的几个问题的总结

来源:互联网 发布:淘宝账号怎样注销 编辑:程序博客网 时间:2024/05/16 02:00
  1. 全局变量和静态变量的初始化会在main函数进入之前运行;调用顺序依照定义顺序,析构反之;

  2. 如果返回了局部变量的引用,那么返回之后如果继续以引用形式握着,那么之后的修改都没起作用(不知道是不是编译器在帮忙);如果拷贝赋值给其他变量,那么这个返回的变量也并没有有效数据。

    A& f(A a){return a;}int main(){A a;a.a = 1;A& b =f(a);cout<<"some b "<<b.a<<endl;for(int i = 0;i<5;++i){b.a = 2;cout<<i<<"   "<<b.a<<endl;}return 0;}

    这段代码取名叫做“我的取名如此优雅”^_^

  3. 前几天在查bug的时候忽然想起来了一个问题,虽然不是bug原因不过忽然感觉到python和C++的一个巨大差别,那就是以何种方式传值。——C++传值,python传地址。——而在这之中有一个很大的不同点是,C++会自动清除局部变量,而python会根据引用计数而清除变量。也就是说,在C++中理当对拷贝有着更频繁的需求,因为浅拷贝将会很容易造成野指针。python里边至多是内存泄露或者没关系或者本来就是本意 - -。讲真还想象不到C++的浅拷贝会应用于何处。。。除了那种。。那种。。诶那啥来着

  4. 函数在返回的时候也会调用拷贝构造函数,不管有没有左值去迎接它;例如:

A f(A a){return a;}

耶,终于把这几天折的角捋平了~

4.13 更新

  1. 对于继承过程中的构造函数和析构函数,因为在调用的时候它们只能获得自身层级的信息,所以它们所调用的函数都是本地版本的,即使是虚析构函数也是如此;

  2. 在函数返回的时候,如果是 return SomeClass(someparam);,那么返回的类将直接创建在临时变量的位置,也就是说可以省去依次拷贝构造函数;

0 0