const A& fun(const A& a) const {} 的理解
2014-11-08 12:04
344 查看
废话少说, 直接上菜:
#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:
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; // error
return 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;
}
};
// ok
int main()
{
A a, b;
a.fun(b);
return 0;
}
#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; // ok return 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; // error
return 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;
}
};
// ok
int main()
{
A a, b;
a.fun(b);
return 0;
}
相关文章推荐
- 对C++中const T*&含义的理解
- 对 const char* const &a 的理解
- extern "C" ,const type& fun() const
- 对C++ 中Enum & Macro &Const 的理解
- 对 const char* const &a 的理解
- const int *const& p = &ci;的理解
- 理解c语言中的constant*() &p()[] *p[56]的语法的难点 const
- 对C++中const T*&含义的理解
- 关于指针、const、typedef、作用域::、引用&的一些理解
- 我对系统分析的简单化理解-读"做自己的系统分析师"一文
- 用"堆栈区数据复制"理解Java赋值和参数传递机制的心得
- ssl&tls学习理解(1)
- [原创]我所理解的Remoting(1):Marshaling & Activation - Part II
- Have Fun & Have Busy
- 《C++ primer》学习笔记之十二:const在"="表达式中
- 我所理解的Remoting(1):Marshaling & Activation[下篇]
- 关于C的关键字——const的理解和用法
- const与efficiency&design
- [原创]我所理解的Remoting(1):Marshaling & Activation - Part I
- Q&A about volatile & const(Z)