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