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

  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);,那么返回的类将直接创建在临时变量的位置,也就是说可以省去依次拷贝构造函数;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值