分类: C/C++
2013-07-17 10:38:54
引子:
string& s="hi" 为什么编译不通过
因为如果通过的话,“hi"是常量字符串,s改变就会改变"hi"的内容,所以编译不通过。
const string& s="hi"这样才可以
#include
class test
test(const test& t)
test& operator=(const test& t)
void func(const test& t){}
int main()
//以下说明函数参数的副本 是通过 拷贝构造函数 来初始化的
func(string str) --func("hi")-----------等价于string str="hi"-------------------------调用构造函数string(const char*)
{
public:
test()
{std::cout<<"bbb"<
{std::cout<<"ccc"<
{std::cout<<"aaa"<
void func1(const test t){}
{
const test t1; //bbb
const test t3=t1; //ccc
const test t4(t3); //ccc
const test& t2=t1; //不输出,说明引用不会创建新对象
func(t1); //不输出
func1(t1); //ccc
return 0;
}
func(const string& str)--func("hi")----等价于const string& str="hi"-----------------新建一个副本,调用构造函数string(const char*), 再把这副本复制给引用