Rust 也支持基准测试,它可以测试代码的性能。让我们把src/lib.rs修改成这样(省略注释): #![feature(test)] extern crate test; pub fn add_two(a: i32) -> i32 { a + 2 } #[cfg(test)] mod tests { use super::*; use test::Bencher;
没有经过测试的东西都是不完整的 这一箴言的起源已经不可考了,尽管他不是完全正确的,但是仍然离真理 不远。没有测试过的应用将会使得提高现有代码质量很困难,二不测试应用 程序的开发者,会显得特别多疑。如果一个应用拥有自动化测试,那么您就 可以安全的修改然后立刻知道是否有错误。 Flask 提供了一种方法用于测试您的应用,那就是将 Werkzeug 测试 Client 暴露出来,并且为您操作这些内容 的
11.3. 测试覆盖率 就其性质而言,测试不可能是完整的。计算机科学家Edsger Dijkstra曾说过:“测试能证明缺陷存在,而无法证明没有缺陷。”再多的测试也不能证明一个程序没有BUG。在最好的情况下,测试可以增强我们的信心:代码在很多重要场景下是可以正常工作的。 对待测程序执行的测试的程度称为测试的覆盖率。测试覆盖率并不能量化——即使最简单的程序的动态也是难以精确测量的——但是有启发式方法
14.1 填空: a) 计算机处理的所有数据项最终都是——和——的组合。 b) 计算机所能处理的最小数据项称为——。 c) 一个——是一组相关的记录。 d) 数字、字母和专门的符号称为——。 e) 一组相关的文件称为——。 f) fstream、ifstream和ofstream文件流类的成员函数——关闭文件。 g) istream成员函数——从指定流中读取一个字符。 h) istream成员函数
13.1 列出五个常见的异常例子。 13.2 说明异常处理方法不能用于传统程序控制的原因。 13.3 为什么异常适合处理库函数产生的错误? 13.4 什么是“资源泄漏”? 13.5 如果try块中不抛出异常,try块执行完毕之后控制转到哪里? 13.6 如果在try块之外抛出异常,会发生什么情况? 13.7 说明使用catch(...)的主要优点和主要缺点。 13.8 如果没有匹配所抛出对象类型的
12.1 判断下列各题是否正确。如果不正确,请说明原因。 a)函数模板的友元函数必须是模板函数。 b)如果从一个带单个static数据成员的类模板产生几个模板类,则每个模板类共享类模板 static 数据成员的一个副本。 c)模板函数可以用同名的另一模板函数重载。 d)形式参数的名字可以只在模板函数的形式参数表中出现一次。同一个形式参数名只能用于一个模板函数。 e)关键字 class 指定函数模板
11.1 填空 a)重载的流运算符函数经常定义为类的——函数。 b)能够设置的格式对齐位包括——、——和——。 c)C++中的输入/输出是以字节——的形式实现的。 d)参数化的流操纵算子——和——用于设置和清除格式化状态标志。 e)大多数C++程序都要包含——头文件。该文件中包含了所有输入/输出流操作所需的基本信息。 f)成员函数——和——用于设置和清除格式化状态标志。 g)头文件——中包含了执行
10.1 填空 a)使用继承和多态性有助于消除——逻辑。 b)在类定义中,将——置于虚函数的函数原型的末尾可以声明该函数为纯虚函数。 c)如果一个类包含一个或多个纯虚函数,则该类为——。 d)在编译时就解决的函数调用称为——关联。 e)在运行时才解决的函数调用称为——关联。
9.1 填空 a)如果类 Alpha 继承了类 Beta,则类 Alpha 称为——类,类 Beta 称为——类。 b)C++提供的——机制允许一个派生类继承多个基类,即使这些基类是相互无关的。 c)利用继承能够实现——。这种实现缩短了程序的开发时间,促使开发人员复用已经测试和调试好的高质量软件。 d)——类的对象可作为——类的对象处理。 e)为了将基类指针转换为派生类指针,由于编译器认为这种操作
8.1 填空: a)设a和b是两个整型变量,我们用a+b的形式求这两个变量的和;设c和d为浮点型变量,我们用c+d的形式求这两个变量的和。显然,运算符+具有不同的用途,这是——的例子。 b)关键字——引出了重载运算符函数的定义。 c)要在类的对象上使用运算符,除了运算符——和——以外,其他的必须都要被重载。 d)重载不能改变运算符的——、——和——。 8.2 解释 C++ 中的运算符 << 和 >
7.1 填空: a)——语法用于初始化类的常量成员。 b)成员函数应声明为类的——才能访问这个类的private数据成员。 c)——运算符对指定类型对象动态分配内存并返回该类型的——。 d)常量对象应——,不能在生成之后修改。 e)——数据成员表示类范围信息。 f)对象的成员函数能访问对象的“自我指针”,称为——指针。 g)关键字——指定对象或变量初始化之后不可修改。 h)如果类的成员对象不提供成
6.1 填空 a)结构定义用关键字——引入。 b)类成员通过——运算符和类对象名或通过——运算符和类对象指针访问。 c)指定为——的类成员只能由类的成员函数和友元访问。 d)——是个特殊成员函数,用于初始化类的数据成员。 e)类成员的默认访问模式为——。 f)——函数用于向类的private数据成员赋值。 g)——可以将一个类对象赋给相同类的另一对象。 h)类的成员函数通常指定为——,类的数据成员
5.1 填空 a)指针变量包含另一变量的——值。 b)可以初始化指针的值有——、——或——。 c)可以赋绐指针的惟一整数是——。 5.2判断下列各题是否正确。如果不正确,请说明原因。 a)地址运算符&只能用于常量、表达式和mgaster存储类声明的变量。 b)声明为void的指针可以复引用。 c)不同类型的指针不必进行强制类型转换操作即可相互赋值。 5.3 问答下列问题。假设单精度浮点数存放在4字
4.1 填空: a)清单和表格值存放在——中。 b)数组元素的关系是——和——相同。 c)用于引用数组中特定元素的数字称为数组的——。 d)——用于声明数组长度,使程序伸缩性更强。 c)将数组元素按顺序排列的过程称为数组——。 f)确定数组中是否包含某个键值的过程称为数组——· g)使用两个下标的数组称为——数组。 4.2 判断下列各题是否正确。如果不正确,请说明原因。 a)数组可以存放许多不同类
3.1 填空: a)C++中的程序组件称为____和____。 b)通过____调用函数。 c)只在函数中定义和访问的变量称为____。 d)被调函数中的____语句将表达式返回调用函数。 e)函数首部用关键字____表示函数不返回值或函数不包含参数。 f)标识符的____是程序中可以使用该标识将的部分。 g)将控制从被调函数返回调用者的三种方法是____、____和____。 h)____使编译