C++程序使用.C或者.cpp作为扩展名,C程序使用.c作为扩展名
对于某些UINX系统,也可使用扩展名cc和cxx
DOS不区分大小写
C++实现 | 源代码文件的扩展名 |
---|---|
UNIX | C、cc、cxx、c |
GNU C++ | C、cc、cxx、cpp、c++ |
Digital Mars | cpp、cxx |
Borland C++ | cpp |
Watcom | cpp |
Microsoft Visual C++ | cpp、cxx、cc |
Freestyle Code Warrior | cp、 cpp、 cc、cxx、c++ |
有以下几种
选择取决于开发团体、使用的技术或库以及程序员个人的品位和喜好。
bool,
short(short为short int的简称)至少16位(bit),两个字节(bytes),表示范围-3276832767*,*(*即*-2^152^15-1);
w_char(宽字符类型),可以表示扩展字符集,是一种整数类型,长度不确定
char,1byte=8bit;表示范围不确定,默认情况下无符号,是否有符号有C++实现决定
char fodo;//可能有符号,可能没符号 unsigned char bar;//无符号 signed char snark;//有符号
C++11新增类型
int被设置为对目标计算机而言最为“自然”的长度,自然长度(natural size)指的是计算机处理起来效率最高的长度。int至少与short一样长,4byte=32bit,所能表示范围:-21474836482147483647*;*(*即*-2^312^31-1);
long(long为long int的简称)至少32位,且至少与int一样长,4byte=32bit,所能表示范围:-21474836482147483647*;*(*即*-2^312^31-1);
long long 至少64位,且至少与long一样长。
float,至少32位,指数范围至少是-37到37
double,至少48位,且不少于float,指数范围至少是-37到37
long double,位80、96或128位,指数范围至少是-37到37
可以从头文件cfloat或float.h中找到系统的限制。
注:wchar_t类型是一种整数类型,它有足够的空间,可以表示系统使用的最大扩展字符集。这种类型与另一种整型(底层(underlying)类型)的长度和符号属性相同。对底层类型的选择取决于实现,因此在一个系统中,它可能是unsigned short,而在另一个系统中,则可能是int。cin和 cout将输入和输出看作是char流,因此不适于用来处理 wchar_t类型。iostream头文件的最新版本提供了作用相似的工具——wcin和 wcout,可用于处理 wchar_t流。另外,可以通过加上前缀L来指示宽字符常量和宽字符串。
可对类型名或变量名使用sizeof运算符。
cout << "int is" << sizeof(int) << " bytes.\n"; cout << "short is " << sizeof n_short << " bytes.\n";
头文件climits 定义了符号常量来表示类型的限制。INT_MAX表示类型 int能够存储的最大值,对于Windows 7系统,为2147483 647。编译器厂商提供了climits文件,该文件指出了其编译器中的值。例如,在使用16位int 的老系统中,climits文件将INT_MAX定义为32767。下表对该文件中定义的符号常量进行了总结,其中的一些符号常量与还没有介绍过的类型相关。
符号常量 | 表示 |
---|---|
CHAR_BIT | char的位数 |
CHAR_MAX | char的最大值 |
CHAR_MIN | char的最小值 |
SCHAR_MAX | signed char的最大值 |
SCHAR_MIN | signed char的最小值 |
UCHAR_MAX | unsigned char的最大值 |
SHRT_MAX | short的最大值 |
SHRT_MIN | short的最小值 |
USHRT_MAX | unsigned short的最大值 |
INT_MAX | int的最大值 |
INT_MIN | int的最小值 |
UNIT_MAX | unsigned int的最大值 |
LONG_MAX | long的最大值 |
LONG_MIN | long的最小值 |
ULONG_MAX | unsigned long的最大值 |
LLONG_MAX | long long的最大值 |
LLONG_MIN | long long 的最小值 |
ULLONG_MAX | unsigned long long的最大值 |
C++11使得大括号初始化器用于任何类型(可以使用等号,也可以不使用),这是一种通用的初始化语法。
int hamburgers = {24};//初始化方式一 int emus{7};//初始化方式二 int rheas = 12;//初始化方式三
unsigned char:所占内存大小:1byte=8bit;所能表示范围:0255*;*(02^8-1)
unsigned(unsigned int):所占内存大小:4byte=32bit; 能表示范围:04294967295*;*(*即*02^32-1)
unsigned long: 所占内存大小:4byte=32bit;所能表示范围:04294967295*;*(*即*02^32-1)
十进制
int chest = 10;
八进制:前缀为0
int inseam = 042;
十六进制:前缀为0x或0X
int waist = 0x42;
如果要以十六进制或八进制方式显示值,则可以使用cout的一些特殊特性。控制字符dec、oct和hex分别用于指示cout以十进制、八进制和十六进制格式显示整数。
cout << dec; //表示cout显示十进制数 ...... cout << oct; //表示cout显示八进制数 ...... cout << hex; //表示cout显示十六进制数 ......
接下来考察长度。在C++中,对十进制整数采用的规则,与十六进制和八进制稍微有些不同。对于不带后缀的十进制整数,将使用下面几种类型中能够存储该数的最小类型来表示: int、long或long long。在 int 为 16位、long 为 32位的计算机系统上,20000被表示为 int 类型,40000被表示为long类型,3000000000被表示为long long类型。对于不带后缀的十六进制或八进制整数,将使用下面几种类型中能够存储该数的最小类型来表示:int、unsigned int long、unsigned long、long long或unsigned long long.在将40000表示为long 的计算机系统中,十六进制数Ox9C40 ( 40000)将被表示为unsigned int。这是因为十六进制常用来表示内存地址,而内存地址是没有符号的,因此,usigned int 比 long更适合用来表示16位的地址。
字符名称 | ASCII符号 | C++代码 | 十进制ASCII码 | 十六进制ASCII码 |
---|---|---|---|---|
换行符 | NL (LF) | \n | 10 | 0xA |
水平制表符 | HT | \t | 9 | 0x9 |
垂直制表符 | VT | \v | 11 | 0xB |
退格 | BS | \b | 8 | 0x8 |
回车 | CR | \r | 13 | 0xD |
振铃 | BEL | \a | 7 | 0x7 |
反斜杠 | \ | \\ | 92 | 0x5C |
问号 | ? | ? | 63 | 0x3F |
单引号 | ' | \' | 39 | 0x27 |
双引号 | " | \" | 34 | 0x22 |
创建常量的通用格式
const type name = value;//在C++中尽量用const取代#define
常量指针:const修饰指针,指针指向可以变,指针指向的值不可以变
const int * p = &a;
指针常量:const修饰的是常量,指针指向不可以变,指针指向的值可以变
int * const p = &a;
const即修饰指针又修饰常量:指针指向不可以变,指针指向的值也不可以变
const int * const p = &a;
12.34//float 2.52e+8//E的表示法,+可省略,E大小写皆可 -18.32e-13//E的表示法,-不可省略
ostream方法 setf(),迫使输出使用定点表示法,以便更好地了解精度,它防止程序把较大的值切换为E表示法,并使程序显示到小数点后6位。参数 ios_base:.fixed 和ios_base::floatfield是通过包含iostream来提供的常量。
#include<iostream> int main () { using namespace std; cout.setf(ios_base::fixed, ios_base::floatfield); //迫使cout输出使用定点表示法,并使程序显示到小数点后6位 ...... return 0 ; }
整数/整数=整数(小数部分省略)
double/double = double
double/int = double
int/double = double
double/double = double
float/float = float
求模符号:%
规则:只能为整数,x(x>=n)与n求模,求模后取值为小于n的整数,如:
//与二求模 for(int i=1;i<=10;i++){ //TODO cout << i << "%2 = " << i%2 << " ";//与2求模,求模后取值0,1,为小于2的整数 } cout << endl; //与三求模 for(int i=1;i<=10;i++){ //TODO cout << i << "%3 = " << i%3 << " ";//与3求模,求模后取值0,1,2,为小于3的整数 } cout << endl;
C++11对这个校验表稍做了修改,下面是C++11版本的校验表,编译器将依次查阅该列表:
有符号整型按级别从高到低依次为long long、long、int、short和 signed char。无符号整型的排列顺序与有符号整型相同。类型char、signed char和unsigned char的级别相同。类型bool 的级别最低。wchar_t、char16_t和char32_t 的级别与其底层类型相同。
(typeName) value;//方法一,C语言版 typeName (value);//方法二,C++版,新格式的想法是,要让强制类型转换就像是函数调用一样 //C++还引入了4个强制类型转换运算符,对它们的使用要求更为严格 statistic_cast<typeName> (value)
C++11新增了一个工具,让编译器能够根据初始值的类型推断变量的类型。为此,它重新定义了auto的含义。auto是一个C语言关键字,但很少使用。在初始化声明中,如果使用关键字auto,而不指定变量的类型,编译器将把变量的类型设置成与初始值相同:
auto n = 100;//n为int auto x = 1.5;//x为double auto y = 1.3e12L;//y为long double
显式地声明类型时,将变量初始化0(而不是0.0)不会导致任何问题,但采用自动类型推断时,这却会导致问题。
//声明数组 typeName arrayName[arraySize];
表达式arraySize 指定元素数目,它必须是整型常数(如10)或const值,也可以是常量表达式(如8*sizeof ( int)),即其中所有的值在编译时都是已知的。具体地说,arraySize不能是变量,变量的值是在程序运行时设置的。然而,本章稍后将介绍如何使用new运算符来避开这种限制。
未完待续。。。