C++学习之数据类型—常量
2013-01-21 21:31
218 查看
C++常量分为以下字面常量、符号常量、契约性常量、布尔常量和枚举常量,让我们一起来看看这些常量的用法以及特点。
字面常量:
1、整形字面常量
例如 10,057,0xf7,表示方法可以有八进制,十进制,十六进制。默认的类型为int或者long行,根据字面值的大小来判断。可以通过加入后缀L或者l来强制转换为long类型,又可以加后缀U或者u来强制转换为unsigned类型,例如1024UL为unsigned long类型。
2、浮点字面值常量
可以用十进制,例如3.14或者科学计数法3.12E2来表示,默认的浮点字面值为double类型,在数值后面加上F或者f表示单精度,加上L或者l表示long double类型。
3、字符常量
可打印字符,直接加单引号表示,例如 ‘a’,‘2’;不可打印字符,例如退格键,用转义字符表示,例如换行符‘\n',回车符'\r'等等。
4、字符串常量
例如“hello”,“”,两个相邻的仅由空格、制表符和换行符分开的字符串字面值,可以连接成一个新的字符串字面值。例如
std::out<<"welcome "
"to "
"C++ world!"<<endl;
将会输出:welcome to C++ world!
还有一种方法可以连接多行字面值,在一行程序的末尾加一个反斜杠号可以将此行和下一行当做同一行处理。例如
co\
ut<<"abc\
def"<<endl;
此处,输出abc def。值得注意的是,反斜杠号必须是该行的尾字符,同样,后继行行首的任何空格和和制表符都是该字符串字面值的一部分。
另外,值得一提的是,除了字符串常量之外,无法获取一个字面常量的地址,例如,我们可以char* pa="abc",但是int *p=&3 这样写是错误的。
符号常量:
存在两种符号常量,由#define定义的宏常量和const定义的常量。由#define定义的宏常量是预编译伪指令,在进入编译阶段之前就已经替换成了字面常量,所以,宏常量本质上是字面常量;而由const定义的常量则更为灵活,需分情况对待。
1、const全局常量
此时编译器将该常量放置于符号表中,不需要分配存储空间。任何对该常量的修改都将失败,见下例
此处,编译链接没有出错,但运行的时候不能通过。
2、const局部常量
此处输出,100和1。对此,《C++ primer》上的解释是对于基本类型的const常量,编译器会重新在内存中创建一个它的拷贝,通过其地址访问的是它的拷贝而非原始的符号常量。
字面常量:
1、整形字面常量
例如 10,057,0xf7,表示方法可以有八进制,十进制,十六进制。默认的类型为int或者long行,根据字面值的大小来判断。可以通过加入后缀L或者l来强制转换为long类型,又可以加后缀U或者u来强制转换为unsigned类型,例如1024UL为unsigned long类型。
2、浮点字面值常量
可以用十进制,例如3.14或者科学计数法3.12E2来表示,默认的浮点字面值为double类型,在数值后面加上F或者f表示单精度,加上L或者l表示long double类型。
3、字符常量
可打印字符,直接加单引号表示,例如 ‘a’,‘2’;不可打印字符,例如退格键,用转义字符表示,例如换行符‘\n',回车符'\r'等等。
4、字符串常量
例如“hello”,“”,两个相邻的仅由空格、制表符和换行符分开的字符串字面值,可以连接成一个新的字符串字面值。例如
std::out<<"welcome "
"to "
"C++ world!"<<endl;
将会输出:welcome to C++ world!
还有一种方法可以连接多行字面值,在一行程序的末尾加一个反斜杠号可以将此行和下一行当做同一行处理。例如
co\
ut<<"abc\
def"<<endl;
此处,输出abc def。值得注意的是,反斜杠号必须是该行的尾字符,同样,后继行行首的任何空格和和制表符都是该字符串字面值的一部分。
另外,值得一提的是,除了字符串常量之外,无法获取一个字面常量的地址,例如,我们可以char* pa="abc",但是int *p=&3 这样写是错误的。
符号常量:
存在两种符号常量,由#define定义的宏常量和const定义的常量。由#define定义的宏常量是预编译伪指令,在进入编译阶段之前就已经替换成了字面常量,所以,宏常量本质上是字面常量;而由const定义的常量则更为灵活,需分情况对待。
1、const全局常量
此时编译器将该常量放置于符号表中,不需要分配存储空间。任何对该常量的修改都将失败,见下例
此处,编译链接没有出错,但运行的时候不能通过。
2、const局部常量
此处输出,100和1。对此,《C++ primer》上的解释是对于基本类型的const常量,编译器会重新在内存中创建一个它的拷贝,通过其地址访问的是它的拷贝而非原始的符号常量。
相关文章推荐
- C++简单学习(Part1_lecture 2)(数据类型、变量类型、变量作用域、常量、修饰符类型)
- VS2013MFC对话框工程学习笔记七 - C++数据类型 - 整形 的简单学习
- 【学习ios之路:C语言】数据类型、常量变量、运算符、表达式、格式化输入输出
- c#学习笔记一:变量、常量、预定义数据类型
- swift学习笔记(一)(常量、变量、数据类型、字符串的拼接、数组、字典)
- c++学习之数据类型
- Swift学习(四)常量&变量&基础数据类型
- C++学习笔记(三)复合数据类型
- 【Java学习笔记】02.标识符、常量和数据类型
- php学习第一章:PHP基础语法(一)之PHP数据类型与PHP常量
- PHP学习之[第03讲]PHP5.4 语法、常量、变量、数据类型详解
- C/C++学习之C提高----C程序数组排序、数据类型(大小,别名,封装)、变量、程序的内存四区模型(栈,堆,全局,代码区)
- Delphi 2010学习笔记(4)---数据类型(常量)---2011-01-18
- java学习之路(4)-常量 、变量与数据类型
- The New C++ -- 基本数据类型和字面值常量 (6. 布尔型和布尔字面值常量)
- PL/SQL学习笔记-常量变量及数据类型初步
- C++学习笔记之数据类型
- POCO C++库学习和分析 -- 数据类型转换
- C++学习(三) 复合数据类型(上)
- Cocos2d-x 3.1.1 学习日志3--C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员