3.24 前加与后加的一些不同表现(在这个例子中的)

++ *(scores.begin() + grade / 10); //这一行能够正常运作,使得某一个元素加上1
*(scores.begin() + grade / 10) ++; //这一行不能够正常运作,不能得到正确的输出结果

问题原因:运算符 * 从右向左进行结合, 并且当运算符 ++ 作为后缀时, 优先级相对于 * 更高, 于是实际上的第二行代码的运行效果相当于:

*((scores.begin() + grade / 10) ++); 

同时,这个问题的在中文版第132页,原版第149页有完整的解释和例子。(这本书针不戳)

4.37 用命名的强制类型转换改写下列旧式的转换语句

int i; double d; const string *ps; char *pc; void *pv;
// (a)
pv = (void*)ps;
// (b)
i = int(*pc);
// (c)
pv = &d;
// (d)
pc = (char*) pv;

还没解决,希望知道新版是如何来实现的

6.42 给make_plural函数的第二个形参赋予默认实参’s’,利用新版本的函数输出success和failure的单数和复数形式。

在这里,引用的行为并不和之前所介绍的一样。之前的内容中提到,引用不能够被传入一个字面值常量。但是在这道题目中,允许了类似:

const string &str = "...";

的行为。引用拥有这样的表现可能与它的具体实现方式有关。

还没有解决,猜一手常量指针

6.48 虽然题目是assert()但是我更想知道cin到底是个啥东西

希望在之后的章节能够找到答案

发表评论

您的电子邮箱地址不会被公开。