C++对C的扩展(Extension)
2016-04-17 10:33
323 查看
类型增强
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输出。
二、格式化
相关文章推荐
- CSP考试 2015年12月第1题 数位之和 C语言实现
- C++封装、继承、多态
- c++搜索二叉树的基本操作
- 使用g++编译C++ 11标准的C++代码
- 第七届蓝桥杯C/C++B组省赛部分题目
- [LeetCode]73. Set Matrix Zeroes
- 【C++】强制类型转换运算符
- 经典数独游戏+数独求解器—纯C语言实现
- 30分钟了解C++11新特性
- C++11编译器支持列表
- c++入门第一篇:hello,world!
- C++开发环境
- sizeof和strlen的一些理解
- c++对象模型阅读笔记
- C++学习笔记
- C++字符串完全指南
- VC++6.0中编写Unicode编码的应用程序
- (c++ 递归)先序 中序 还原二叉树
- C++primer 练习15.15
- [LeetCode]89. Gray Code