一些奇怪的疑问 CppPrimer5e 第一部分
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到底是个啥东西
希望在之后的章节能够找到答案