c primerth详细答案打印版.doc

  1. 1、本文档共222页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c primerth详细答案打印版.doc

练习 2.16语言不应该支持所谓的 Type-constraint(类型约束)语法.有三个理由: ?? 它会使 templates 更复杂. ?? 无论如何用户总是能够检验Type 是否提供了“得以顺利将此 template 实例化”的必要函数; 如果他们遗漏了,编译器会对此实例化行为发出错误讯息,指出某个函数有所谓的隐式约束 (implicit constraint),而不只是发出错误信息说这个 template 的实例化是错误的. ?? 请看 LL 练习 2.16 出现的脚注,其中所描述的习惯. 练习 2.17这是正确的语意.另一种做法是在 class template 被产生出来时即检验此一 template 的所有可能 用法.这会造成编译时间的严重浪费.不过此种语意的缺点是,以某个类型将 template 实例化,在程 序 A 中也许可以有效运作,在程序 B 中也许不能成功,视被调用的函数而定. 练习 2.18以下事情有可能在这个函数中出现错误: ?? file_name 可能是个空字符串(empty string). ?? ifstream constructor 可能无法打开文件,即使 file_name 是一个有效字符串. ?? 文件起始处可能并不内含一个 int 数值. ?? elem_cnt 可能收到一个不正确的值:太大、或 0、或负值. ?? allocate_array() 为 elem_cnt 个元素分配空间,可能失败. ?? while 循环读到太多元素;这个循环会在遇到EOF(或读取int 失败)时结束,但它并未考虑pi 所指数组的大小. ?? sort_array() 会对 pi 所指向的数组排序,该数组假想有elem_cnt 个元素.但是while 循 环可能在读入elem_cnt 个元素之前就结束,因为输入端的 ints 个数不足,并因而造成数组的 剩余部分没有初值. ?? sort_array() 可能会收到一个无效指针 pi,因为此处并未检查allocate_array() 的返回值; 这个错误可能会造成程序在循环内当掉. 练习 2.19int *alloc_and_init(string file_name) { ifstream infile(file_name.c_str()); int elem_cnt; infile elem_cnt; try { int *pi = allocate_array(elem_cnt); int elem; int index = 0; while (cin elem) pi[index++] = elem; sort_array(pi, elem_cnt); register_data(pi); return pi; } catch(const noMem n){ cout allocate_array() error n endl; } catch(int i){ cout sort_array() error i endl; } catch(const string s){ cout register_data() error s endl; } } 练习 2.20int *alloc_and_init(string file_name) { try { ifstream infile(file_name.c_str()); if (!infile) throw cannot open file; int elem_cnt; infile elem_cnt; if (!infile || elem_cnt = 0) throw invalid elem_cnt; int *pi = allocate_array(elem_cnt); int elem; int index = 0; while (cin elem){ if (index = elem_cnt) throw too many input elements; pi[index++] = elem; } sort_array(pi,index); register_data(pi); return pi; } catch(const noMem n){ cout allocate_array() error n endl; throw; // 重新丢出(rethrow)exception 以便通知用户 } catch(int i){ cout sort_array() error i endl; throw; } catch(const string s){ cout register_data() error s endl; t

文档评论(0)

cai + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档