const A& fun(const A& a) const {} 的理解
来源:互联网 发布:ibatis源码下载 编辑:程序博客网 时间:2024/06/02 05:58
废话少说, 直接上菜:
#include <iostream>using namespace std;class A{public:int x;A(A&){cout << "copy constructor" << endl;}void fun() const{x = 1; // error, 这个const限定该成员函数不能改变成员变量}};int main(){return 0;}
继续:
#include <iostream>using namespace std;class A{public:int x;A(){}A(A&){cout << "copy constructor" << endl;}void fun(A a) // 有对象拷贝{}};int main(){A a, b;a.fun(b); // 会有拷贝构造函数被调用return 0;}
继续:
#include <iostream>using namespace std;class A{public:int x;A(){}A(A&){cout << "copy constructor" << endl;}void fun(A& a) // 引用{}};int main(){A a, b;a.fun(b); // 没有拷贝构造函数被调用return 0;}
继续看:
#include <iostream>using namespace std;class A{public:int x;A(){}A(A&){cout << "copy constructor" << endl;}void fun(const A& a) {a.x = 100; // error, const引用, 所以a.x的值不能改变}};int main(){A a, b;a.fun(b);return 0;}
go on:
#include <iostream>using namespace std;class A{public:int x;A(){}A(A&){cout << "copy constructor" << endl;}A fun() {A aa;return aa; }};int main(){A a;a.fun(); // 会有拷贝构造函数被调用return 0;}
go on:
#include <iostream>using namespace std;class A{public:int x;A(){}A(A&){cout << "copy constructor" << endl;}A& fun() {A aa;return aa; // danger, 返回局部对象的引用非常危险, 此时仅仅作示意用 }};int main(){A a;a.fun(); // 没有拷贝构造函数被调用return 0;}go on:
#include <iostream>using namespace std;class A{public:int x;A(){}A(A&){cout << "copy constructor" << endl;}A& fun(A& a) {return a;}};int main(){A a, b;a.fun(b).x = 1; // okreturn 0;}
go on:
#include <iostream>using namespace std;class A{public:int x;A(){}A(A&){cout << "copy constructor" << endl;}const A& fun(A& a) {return a;}};int main(){A a, b;a.fun(b).x = 1; // error, 常引用return 0;}
go on:
#include <iostream>using namespace std;class A{public:int x;A(){}A(A&){cout << "copy constructor" << endl;}A& fun(const A& a) {return a;}};int main(){A a, b;a.fun(b).x = 1; // errorreturn 0;}
最后的菜:
#include <iostream>using namespace std;class A{public:int x;A(){}A(A&){cout << "copy constructor" << endl;}const A& fun(const A& a) const{return *this;}};// okint main(){A a, b;a.fun(b);return 0;}
1 1
- const A& fun(const A& a) const {} 的理解
- const int *const A;
- const char* const a
- const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别?
- const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别
- const int a; int const a; const int *a; int * const a; const int * const a;
- 对 const char* const &a 的理解
- const int a; int const a; const int *a; int * const a; int const * const a ; const int * const 之间的区别
- 关于const的问题 const int *a; int const *a; int *const a; 的区别
- const int *a and int *const a and const int * const a 的区别
- const int *a与int *const a,const int *const a的区别
- int const *a, const int *a,const int *const a的测试
- const int *a与int *const a,const int *const a的区别
- const A *const func(const A *const one)这句话你怎么理解?
- const int *a, int const *a,int * const a
- int * const a, 和 const int* a,const PInt a;
- const void *a 与 void* const a
- const void *a 与 void *const a 的区别
- 程矢Axure夜话:中继器系列视频教程之中继器表格删除数据2
- 在android C/C++ native编程(ndk)中使用logcat
- ViewOverlay: When, How and for What Purpose?
- 程矢Axure夜话:中继器系列视频教程之中继器表格删除数据
- 大苏打撒旦撒旦撒旦啊撒旦
- const A& fun(const A& a) const {} 的理解
- 此主题相关图片如下
- WebService大数据量时异常
- session与cookie的区别
- 程矢Axure夜话:中继器系列视频教程之中继器表格奇偶行换色2
- 025 替换字符串中的空格(keep it up)
- spark shuffle
- Android开发里R.id无法自动生成的解决
- 程矢Axure夜话:中继器系列视频教程之中继器表格奇偶行换色