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

C++对C的扩展(Extension)

2016-04-17 10:33 253 查看



类型增强

1 类型检查更严格

int num=325;
const int* a=#       // 情况1
int const *a=#       // 情况2
int* const a=#       // 情况3
const int* const a=# // 情况4


将数据类型去掉,可更直观地查看const修饰谁。

情形1:const * a

const修饰指针a所指向的变量,即指针a指向为常量,表示不能修改指针a所指向的内容;

但可通过修改num的值修改内容,或通过修改指针a所指向的变量修改内容;

该情形可以先不初始化,因为指针本身不是常量;

int num=325,n=1988;
const int* a=#
*a=1988;           // 错误
num=1988;          // 正确,通过修改num的值来修改a所指向的内容
a=&n;              // 正确,通过修改a指向的变量来修改a所指向的内容


情形2:const * a

同情形1;

情形3:* const a

const修饰指针a,即指针a本身是常量,表示指针a不能指向其他内存空间;

该情形必须在定义同时进行初始化;

int num=325,n=1988;
int* const a;       // 错误,没有初始化
int* const a=#  // 正确
*a=1988;            // 正确,允许修改值
a=&n;               // 错误


情形4:const * const a

const修饰指针a和指针a指向的内容,表示指针a和指针a指向均为常量;

2 布尔类型bool

布尔类型数据的取值只有两个,即false和true;

可将bool类型转化成int类型,flase为0,true为1;int类型转化成bool类型,非0整数表示true,0表示false;

3 真正的枚举enum

enum WEEK{ Sun, Mon, Tue, Wen, Thur, Fri, Sat };
WEEK today = Mon;      // 正确
WEEK today = 1;        // 错误,只能用被枚举出来的元素初始化
WEEK today = WEEK(1);  // 正确,可用强制类型转换初始化


注意:

C++中,尽量使用枚举或const修饰常量,尽量不使用宏#define;

4 表达式的值可被赋值

int a, b = 5;
(a = b) = 10;         // 正确,等价于a=b;a=10;
(a<b ? a : b) = 200;  // 正确,先取最小值为b,再将b赋值给200


C++某些表达式可以被赋值;



输入与输出cin/cout

一、输入输出流

1 标准输入流cin

cin是istream类一个实例,cin对象附属到标准输入设备,通常是键盘;

2 标准输出流cout

cout是ostream类一个实例,cout对象附属到标准输出设备,通常是屏幕;

3 标准错误流cerr

cerr是ostream类一个实例,cerr对象附属到标准输出设备,通常是屏幕;

但cerr对象是非缓冲的,且每个流插入到cerr,立即输出;

4 标准日志流clog

clog是ostream类一个实例,clog对象附属到标准输出设备,通常是屏幕;

但clog对象是缓冲的,每个流插入到clog,先存储在缓冲区,知道缓冲填满或缓冲区刷新才会输出;

注意:

对于小实例,无法区分cout、cerr和clog;

但在编写和执行大型程序时,三者之间差距很明显,使用cerr流显示错误信息;其他日志消息使用clog输出。

二、格式化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: