C++笔记——c++编程思想(下)第二三四章防御性编程及输入输出流

1. 断言(assert)的使用时机与if语句的差别:assert主要用在调用和测试阶段,用来发现潜在的bug,发行版本中应该完全去除。if是正常的逻辑分支,用来预防错误的发生,发行版本中,所有的assert失败情况都要(或用if)加以处理,换句话说,assert是专为调试而写的特殊if语句,它可直接指出出错所在地方并终止程序,无需用户写这些代码。

2. 断言不假时,将调用asertImpl函数,此函数接受三个参数,断言所在的行号,文件名及表达式字符串。

3. 检测内存泄漏的一种方法:重载new,delete方法,使它加入两个参数,内存分配和释放操作所在的行号及文件名(分别由宏__LINE__和__FILE__得到),并在delete和new操作中打印出相应信息:**文件第**行分配了**内存。

4. 防止内存泄漏的其它方法有:智能指针,养成好习惯,代码走查,检测工具,虚析构函数的使用等。好的编程习惯包括:数组使用之前,一定要初始化、分配内存一定自己释放、注重编译器的警告信息、类型转换尽量规范等。

5. string可以用char * 初始化,也可以将string中的内容取出为char *,用str.data()可以取出为const char *类型的内容,用str.c_str()可以取出为C风格的串,即带'/0'结尾的串。

6. 虽然通常将string当成一个类,但其它并非如此,它是模板特化而来的:

typedef basic_string<char> string;

basic_string的声明为:

template <class charT, class traits=char_traits<charT>, class allocator=allocator<charT>> class basic_string;

其中第二三个参数有默认值,分别表示(比较等)特性和内存分配方式,若想生成一个不区分大小写的string类,只需要从char_traits派生出应具有的特征,然后typedef basic_string<char, ichar_traits> istring即可。其中ichar_traits为派出的特征类。

7. istream, ostream, iostream与string一样,都是由模板派生而来的特化类。

8. 为什么不用C的I/o库封闭成类,而引用输入输出流?

(1)printf等的可变参数特性,需要一个专门的运行时解释程序,占空间;

(2)运行时解释程序运行会影响速度;

(3)printf不会进行参数类型和个数等的检查,易引发错误;

(4)printf扩展性不好,只支持几种基本数据类型。

9. 有三种方式可以按行读取:成员函数get()、成员函数getline()及非成员函数getline()。getline与get的区别在于,get不会读取换行符,而getline会读取并丢掉之,方便连续读取。

10. 输入输出字符串流可以输出到一个窗口变量中,通过ostringstream和istringstream。如把文件全读入到一个字符串中,则可不用考虑换行。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值