[2018年5月13号]C++ primer 课后练习第十三章 拷贝控制 第十四章 重载运算与类型转换

13.55
    void push_back(string&& t) { data->push_back(std::move(t)); }

13.56

会发生死循环,无限递归

Foo ret(*this) 生成的临时变量是一个左值,而左值调用的sorted只符合当前这个函数,所以会一直轮回执行无限递归

13.57

Foo(*this)生成的是一个右值,所以可以正常执行

13.58

13.56 发生了无限递归,栈溢出


13.57正常执行


14.1

这题目又是没看懂...

不一样的地方:....不知道该如何回答

一样的地方:参数数量相同,运算顺序相同

14.2:略

14.3

(a) string版本的==

(b) string版本

(c) vector版本

(d)?????编译错误

14.4

赋值(=),下标([]),调用(())和成员访问箭头(->)运算符必须是成员

复合赋值运算符一般来说应该是成员,但并非必须,这一点与赋值运算符略有不同

改变对象状态的运算符或者与给定类型密切相关的运算符,入递增,递减和解引用运算符,通常应该是成员

具有对成型的运算符可能转换任意一段的运算对象,例如算术,相等性,关系和位运算符等,因此它们通常应该是普通的非成员函数

根据上述条件,b,c,d,f,g,h都该是成员函数

14.5

视情况而定

14.6:略

14.7

std::ostream& operator<<(std::ostream& os, const String & s) {
    size_t size = s.end -s.begin;
    for(size_t i = 0 ; i != size; i++){
        os << *(s.begin+i);
    }
    return os;
}

并在String类设置为友元

    friend std::ostream& operator<<(std::ostream& os, const String & s);

14.8:略

14.9:略

14.10

在输入b时会检测到输入失败,对象将赋予默认的状态

14.11

将会异常跳出

14.12

14.13



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值