这里的复制构造函数怎么不执行呢?
时间:2011-12-12
来源:互联网
#include<string>
using namespace std;
class cls
{
public:
cls(const string &str) : val(str)
{
cout<<"参数为string类对象\n";
}
cls(const char * str)
{
cout<<"参数为C风格字符串\n";
}
cls(const cls &pe) : val(pe.val)
{
cout<<"复制构造函数\n";
}
private:
string val;
};
int main()
{
cls a = "aaaaaaaaaaaaaaa";
cls b = string("AAAAAAAAAAAAAAAAA");
return 0;
}[code=C/C++][/code]
这里的复制构造函数怎么没效?
作者: Daisy_Chain 发布时间: 2011-12-12

作者: Demon__Hunter 发布时间: 2011-12-12
复制构造函数 跟 赋值函数是不一样的哦。
作者: relaxisland 发布时间: 2011-12-12
cls a = "aaaaaaaaaaaaaaa";
cls b = a;
作者: zero_226 发布时间: 2011-12-12
作者: zero_226 发布时间: 2011-12-12
你怎么调用的。
复制构造函数 跟 赋值函数是不一样的哦。
up一下,cls a = "aaaaaaaaaaaaaaa";
cls b = string("AAAAAAAAAAAAAAAAA");
这两句应该都是赋值函数,也就是对“=”的重载
作者: zero_226 发布时间: 2011-12-12
哪里?
不好意思搞错了,是这样的,我代码重新贴上:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
class String{
char word[256];
public:
String(const char *ch = "")
{
cout<<"Default constructor"<<endl;
strcpy(word , ch);
}
String(const String &str)
{
cout<<"Copy constructor"<<endl;
strcpy(word , str.word);
}
String& operator= (const String &str)
{
cout<<"Operator ="<<endl;
strcpy(word , str.word);
return *this;
}
};
int main()
{
String s = "AAAAAAAAAAAAA";
return 0;
}
s是复制初始化的吧?它是不是会先执行String(const char *ch = ""),然后执行String::String(const String &str),为什么我在VS2008上只显示Default constructor呢?
作者: Daisy_Chain 发布时间: 2011-12-12
作者: taodm 发布时间: 2011-12-12
因为“优化”
那我就搞不懂了:
如果你将
String::String(const String &str)
放入private:标号中的话就会产生错误,这说明编译器确实欲访问它啊!
作者: Daisy_Chain 发布时间: 2011-12-12
另外,即使“规定”也很多编译器不依。
所以,没什么好折腾的。
作者: taodm 发布时间: 2011-12-12
因为“规定”:即使优化也应该检查拷贝构造函数的可访问性。
另外,即使“规定”也很多编译器不依。
所以,没什么好折腾的。
恩 多谢。明天可以结贴了。
作者: Daisy_Chain 发布时间: 2011-12-12
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28