您的位置:首页 > 编程语言 > C语言/C++

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

2012-08-29 16:26 176 查看
习题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调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: