- 论坛徽章:
- 0
|
OwnWaterloo 发表于 2012-04-17 15:13 ![]()
回复 549# AD8018
也有确实有实现为一对函数的C库:R* f(T* x); R const* f_c(T const* x)。 具体是哪个 ...
很多疑问?我来尝试着回答一下
1. 到底是C的书,还是C++的书?
为什么看到这么多的例子里大量出现的是strcmp, FILE*, 手工实现list;而不是直接用std :: string, std :: iostream, std :: list?
// 这个帖子是关于《我的第一本C++书》这本C++书的
// 但,大家现在看到的是另外一本关于C的,跟C++没有关系,
我能想到的理由: C-style-string, 手工实现list只是作为范例。
介绍编程需要提出一些问题, 然后讲解如何编程去解决它们, 只是本书恰好使用字符串与链表作为需要解决的问题。
并不排除其他章节会讲解 std :: string 与 std :: list。
而 FILE* , 是因为 iostream 确实存在许多问题。 但后续也有章节会介绍 —— 至少,为了能看懂那些使用 iostream 的代码也应该介绍。
只是目前公布出的样章里恰好都不是"后续章节"?
// 混淆了,不好意思,这是两本书
2. 作者自己有 const-correctness 的意识么?
word* findnode(word* head, char* key);
如果说后续会出现它的一个重载:
word const* findnode(word const* head, char* key);
那对head就说得通。 但key绝对说不通。 怎么都应该是:
word* findnode(word* head, char const* key);
word const* findnode(word const* head, char const* key);
能想起的两个反例: CreateProcessA还是W, 还有一个模拟键盘的库(按键精灵用的那个,忘记名字了)。
vector<char> v(s.begin(), s.end());
v.push(0);
f(&v[0]);
而不能f(s.c_str());
真的是很难受……
// 恩,这里确实是我的错误,谢谢大家的提醒
3. 作者打算如何说清 pointer 与 const 之间的故事?
const本身还不算特别难,而 pointer…… 就是C/C++ 的特色,也是困难的地方。
这两者搅和在一起之后,更是让许多程序员都弄不明白了。
我能想到的,将这两者一个接一个地说清楚的办法就是避免用char const* 做key。
将例子换成:
T* findnode(T* head, int /* 比如用int,总之避免用指针 */ key);
等有了重载、const、const 与 pointer以及const-correctness的准备之后再介绍:
T const* findnode(T const* head, int key);
就抓不出毛病了。 之后的其他例子就可以用 char const* 作为key了。
// 关于const,也许稍后我可以将相关的章节贴出来,大家帮我看看我讲清楚了没有 |
|