【C++ Primer 学习笔记】chapter6 语句

习题6.16

在输入两个vector的元素时可以用特定值标记输入,也可以用文件结束符(输入ctrl+z)来控制元素输入的结束,使用后一种方法的时候,在第二个输入循环钱要记得将流cin恢复为有效状态

 

cout<<"请输入第一个int型vector对象ivec1中的元素:(ctrl+z to end)"<<endl;
while(cin>>num1) 
  ivec1.push_back(num1);
 fflush(stdin);//加入这句清除缓冲区。先清除再设置流状态
    cin.clear(); //将cin恢复为有效状态
 cout<<"请输入第二个int型vector对象ivec2中的元素:(ctrl+z  to end)"<<endl;
 while(cin>>num2)
  ivec2.push_back(num2);

6.13 try块和异常处理

在<stdexcept>头文件中定义的标准异常类

exception               最常见的问题

runtime_error       运行时错误:仅在运行时才能检测的问题

range_error          运行时错误:生成的结果超出了有意义的值域范围

overflow_error      运行时错误:计算上溢

underflow_error   运行时错误:计算下溢

logic_error            逻辑错误:可在运行前检测到的问题

domain_error       逻辑错误:参数的结果值不存在

invalid_error         逻辑错误:不合适的参数

length_error         逻辑错误:试图生成一个超出该类型最大长度的对象

out_of_range       逻辑错误:使用一个超出有效范围的值

 

6.14 使用预处理器进行调试

1)使用NDEBUG预处理变量

#ifndef NDEBUG

cerr<<" "<<endl;

#endif

默认情况下,NDEBUG未定义,这意味着必须执行#ifndef 和#endif之间的代码。

开发过程中,保持未定义NDEBUG就会执行其中的调试语句,开发完成后,可通过定义NDEBUG,删除这些调试语句。

2)assert预处理宏

assert() 宏用法

  注意:assert是宏,而不是函数。在C的assert.h 头文件中。

  assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:

  #include <assert.h>

  void assert( int expression );

  assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,

  然后通过调用 abort 来终止程序运行。

 

/* assert example */
#include <stdio.h>
#include <assert.h>

void print_number(int* myInt) {
  assert (myInt!=NULL);
  printf ("%d\n",*myInt);
}

int main ()
{
  int a=10;
  int * b = NULL;
  int * c = NULL;

  b=&a;

  print_number (b);
  print_number (c);

  return 0;
} 


使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。 在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值