lshwankidoo
回首忘路
采纳率100%
2016-05-27 17:25

string类问题,为什么赋值调用构造函数

已采纳

最近在学自实现string类,为什么mystring s;s=“china”;第二句调用的是构造函数?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • oyljerry oyljerry 5年前

    第一句是调用的构造函数。这样对象实例s已经构造好了。第二句是调用的operator =来进行数据赋值,这个不属于构造函数。mystring s = "asss"; 这样就是调用的拷贝构造函数

    点赞 评论 复制链接分享
  • lshwankidoo 回首忘路 5年前

    谢谢各位,现总结如下(编译器gcc)
    1 mystring s;
    2 s="china";
    第一句调用构造函数,构造一个空对象。
    第二句调用赋值重载'operator =',根据编译器提示,操作数可以是①mystring对象,也可以是②大括号括起来的初始化列表。这里是②。
    通过调试,可以看出第二句分为2个步骤,
    1).调用构造函数,构造一个临时变量
    mystring temp("china");
    2).调用赋值重载函数'operator ='
    s=temp;

    点赞 1 评论 复制链接分享
  • oSanYeCao1234567 RoidCoder 5年前

    不错啊,学得挺深入的

    点赞 评论 复制链接分享
  • u013427969 ClouddRenn 5年前

    这个字符串C++还有C还有java有区别啊
    //C++
    string s1="123";
    string s2="123;//这两个s1,s2并不是同一个地址
    //C
    char *p1="123";
    char *p2="123";//这两个是一个地址
    //Java
    string s1,s2;
    s1="123";
    s2="123";//这两个也是同一个地址

    点赞 评论 复制链接分享
  • lshwankidoo 回首忘路 5年前

    刚才实验了一把,说法并不是很准确,我重载了构造函数,mystring::mystring(char* str,int len);
    使用mystring s2;s2={"hellow",6};也会调用构造函数,并不是只有一个参数时才会调用。
    不明白为什么用对象初始化和赋值时,要分拷贝构造和赋值重载。而用参数表初始化和赋值时,为什么没有分别,都用的是构造函数。
    求高手解答,可能问的问题不对,百度不到图片说明

    点赞 评论 复制链接分享
  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 5年前

    C++就是这么规定的。如果说构造函数只有一个参数,也可以用等号。
    也就是s = "china";相当于s("china");

    点赞 评论 复制链接分享

为你推荐