遇到以下写法,冒号后面是对变量赋值
class A { int a; int b; public: A( int aa, int bb ):a(aa),b(bb) { } }
等价于:
A( int aa, int bb ) { a=aa; b=bb; }
代码位置:
#include <iostream> using namespace std; class A { public: A(int msg){ this->msg = msg; cout<<"create A\n"; } ~A(){ cout<<"destroy A\n"; } int msg; }; void swap(A& a, A& b) { A temp = a; a = b; b = temp; } int main() { A a(1); A b(2); std::cout<<"a="<<a.msg<<"b="<<b.msg; swap(a, b); std::cout<<"a="<<a.msg<<"b="<<b.msg; std::cout<<"hellow world"; //a会被销毁吗? return 0; }
1 局部变量创建
直接在作用域内A a(对应无参数构造函数)以及A a(1) (带参数构造函数)在栈上创建对象
2 引用的问题
c的函数如果不带引用是按照值传递的!如下函数
void swap(A* a, A* b) { A* temp = a; a = b; b = temp; }
这样写交换对象是没用的。
因为指针是值传递的,离开了swap函数一切照旧
时间: 2024-10-12 07:56:10