全局变量和静态变量的初始化会在main函数进入之前运行;调用顺序依照定义顺序,析构反之;
如果返回了局部变量的引用,那么返回之后如果继续以引用形式握着,那么之后的修改都没起作用(不知道是不是编译器在帮忙);如果拷贝赋值给其他变量,那么这个返回的变量也并没有有效数据。
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; }
这段代码取名叫做“我的取名如此优雅”^_^
前几天在查bug的时候忽然想起来了一个问题,虽然不是bug原因不过忽然感觉到python和C++的一个巨大差别,那就是以何种方式传值。——C++传值,python传地址。——而在这之中有一个很大的不同点是,C++会自动清除局部变量,而python会根据引用计数而清除变量。也就是说,在C++中理当对拷贝有着更频繁的需求,因为浅拷贝将会很容易造成野指针。python里边至多是内存泄露或者没关系或者本来就是本意 - -。讲真还想象不到C++的浅拷贝会应用于何处。。。除了那种。。那种。。诶那啥来着
函数在返回的时候也会调用拷贝构造函数,不管有没有左值去迎接它;例如:
A f(A a){return a;}
耶,终于把这几天折的角捋平了~
4.13 更新
对于继承过程中的构造函数和析构函数,因为在调用的时候它们只能获得自身层级的信息,所以它们所调用的函数都是本地版本的,即使是虚析构函数也是如此;
在函数返回的时候,如果是 return SomeClass(someparam);,那么返回的类将直接创建在临时变量的位置,也就是说可以省去依次拷贝构造函数;