拷贝构造函数的问题

szn_409 2016-06-18 10:28:13

class CMyString
{
public:
CMyString(){}
CMyString(char *temStr) : str(temStr){printf("b0");}

private:
string str;
CMyString(const CMyString&){printf("b1");}
CMyString(const CMyString&&){printf("b2");}
CMyString& operator = (const CMyString&){return *this;};
};

int _tmain(int argc, _TCHAR* argv[])
{
CMyString str0 = "s0";
return 0;
}


如上代码,为什么CMyString str0 = "s0";能通过编译? 此类的拷贝构造函数不是private的吗?
...全文
102 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
勤奋的小游侠 2016-06-20
  • 打赏
  • 举报
回复
int _tmain(int argc, _TCHAR* argv[]) { CMyString str0 = "s0"; CMyString str1 = CMyString(str0); return 0; } 红色的这种才是调用拷贝构造函数,明显编译不通过。
sdghchj 2016-06-18
  • 打赏
  • 举报
回复
CMyString(const CMyString&)才是拷贝构造 CMyString(const CMyString&&) move构造 CMyString& operator = (const CMyString&) 拷贝赋值 CMyString str0 = "s0";实际上是CMyString str0( "s0");调用了CMyString(char *temStr)
小灸舞 2016-06-18
  • 打赏
  • 举报
回复
谁说他会调用拷贝构造?

拷贝构造函数被调用的时机:
1. 当用类的一个对象去初始化该类的另一个对象(或引用)时系统自动调用拷贝构造函数实现拷贝赋值。
2. 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。
3. 当函数的返回值是类对象时,系统自动调用拷贝构造函数。
列子汤问 2016-06-18
  • 打赏
  • 举报
回复
CMyString str0 = "s0";调用的是构造函数: CMyString(char *temStr) : str(temStr){printf("b0");} 不是拷贝构造函数。 下面是调用拷贝构造函数的一个例子 void func( CMyString strObj) { //这个地方直接对strObj的使用就调用了拷贝构造函数。 }
paschen 版主 2016-06-18
  • 打赏
  • 举报
回复
调用的是CMyString(char *temStr) : str(temStr){printf("b0");}构造函数,你参数类型是const char*,这个构造函数是公有的啊

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧