1.基本内置类型(Primitive Built-in Types)
除了算数类型外还定义了一种称为void的特殊类型。 算数类型是如何在计算机中存储的? 每一个字节和一个称为地址的数关联起来要让地址对应的字节有意义,我们需要知道存储在该地址的值得类型,从而知道需要多少位和如何解释这些位。 可以将算数类型的任何值赋给bool对象。0值算数类型代表false,任何非0都代表true。 signed and unsigned types. 前者可以表示正负0,后者只能表示非负数,即正数和0。 C++中,把负值赋给unsigned对象是完全合法的, -1赋给8位的unsigned char,那么结果是255,因为255是-1对256求模后的值。
浮点型,float一般用一个字(32位)来表示,只能保证6位有效数字。而double型一般用两个字(64位)来表示 ,至少是10位有效数字。 因为C++的整型数设计的很开放,就像C语言一样,能够在有必要的时候直接处理硬件,所以对大多数程序员来 说,应该通过限制实际使用的类型来忽略这些复杂性。 比如用整型计数的时候,当你统计标准库容器元素的个数的时候,最好用标准库为你定义的计数类型, 除此之外,使用unsiged比较明智,因为可以避免越界导致结果为负数的可能性。
1. 整型算数运算的时候,尽量别用short,以防止赋值越界,后果可能是产生一个很大的复数。 2. 用32位表示int,64位表示long的机器,会出现选择int还是long的难题, 用 long 类型进行计算所付出的 运行时代价远远高于用 int 类型进行同样计算的代价,所以选择类型前要先了解程序的细节并且比较 long 类型与
int 类型的实际运行时性能代价。
3. 决定使用哪一种浮点型就容易多了。使用 double 类型基本上不会有错。在 float 类型中隐式的精度损失 是不能忽视的,而 double 类型精度代价相对于 float 类型精度代价可以忽略。事实上,有些机器上,double 类型比
float 类型的计算要快得多。long double 类型提供的精度通常没有必要,而且还需要承担额外的运行代价。
2.字面值常量 (Literal Constants) 表示内置类型的值的常量就叫做字面值常量,而类类型或者标准库类型都没有字面值。 整型: 20 // decimal 10进制 024 // octal 8进制 0x14 // hexadecimal 16进制 128u /* unsigned */ 1024UL /* unsigned long */ 1L /* long */ 8Lu /* unsigned long */ 没有short类型的字面值常量 浮点型(默认的浮点字面值常量为 double 类型): 3.14159F .001f 12.345L 0. 3.14159E0f 1E-3F 1.2345E1L 0e0 布尔型的字面值 true false 打印型字符的字面值 'a' '2' ',' ' ' L'a' //宽字符,wchat_t类型 非打印型的字符 例如 \n \b 另外,我们可以用反斜杠加数字来表示通用转义字符, 注意:此处的数字默认是八进制,如需用十六进制需要 写成,\xddd,d为一个或多个16进制数字组成 \7 (bell) \12 (newline) \40 (blank) \0 (null) \062 ('2') \115 ('M') 字符串字面值 “HelloWorld”编译器自动在末尾加上一个空字符。因此'a'和"a",后者由'a'和'\0'组成。 同理也有宽字符串,L"helloworld",里面的每一个字符都是宽字符。包括最后的\0。 两个相邻的仅由空格、制表符或换行符分开的字符串字面值(或宽字符串字面值),可连接成一个新字符串字 面值: // concatenated long string literal std::cout << "a multi-line " "string literal " "using concatenation" << std::endl; 连接字符串字面值和宽字符串字面值的行为是未定义的。结果是受很多因素影响的。不要依赖未定义行为,尽 量杜绝出现。 C++允许用反斜杠来连接语句: // ok: A \ before a newline ignores the line break std::cou\ t << "Hi" << st\ d::endl; // multiline string literal std::cout << "a multi-line \ string literal \ using a backslash" << std::endl; return 0; } 后继行的行首的空格会算到字符串里面,因此不能有缩进。
3.变量(Varible) 为什么要有变量? 变量可以重复利用并计算,减少代码冗杂。C++是强静态类型语言,在编译时会检查,操作对象是否能够被这样子操作,这种机制能使得在程序越来 越复杂的时候,帮助我们更早的发现错误。 什么是变量? 变量提供了程序可以操作的有名字的存储区。 什么是对象? 内存中具有类型的区域。 我们可以自由地使用对象描述程序中可操作的大部分数据,而不管这些数据是内置类型还是类类型,是有名字的 还是没名字的,是可读的还是可写的。 规定变量命名要以字母或下划线开头,变量命名习惯最重要的是保持一致。 变量定义: double salary, wage; // defines two variables of type double int month, day, year; // defines three variables of type int std::string address; // defines one variable of type std::string 变量初始化和赋值是两种不同的操作。直接初始化语法更灵活效率更高。 变量初始化方式是多变可以混合的,具体如下。
#include <string>
// ok: salary defined and initialized before it is used to initialize wage double salary = 9999.99, wage(salary + 0.01); // ok: mix of initialized and uninitialized int interval, month = 8, day = 7, year = 1955; // ok: both forms of initialization syntax used std::string title("C++ Primer, 4th Ed."), publisher = "A-W";extern是声明,任何变量都需要声明或定义。 命名一样的时候,局部变量屏蔽全局变量。 for(int i=0;i<2;i++) 此处的i作用域在for循环外面。 4.const限定符 非const变量默认为extern,所以不用显式声明为extern。但是在一个文件中的全局变量如果是const类型的 话,要让它可以在别的文件中可用,就必须显式声明为 extern const 5.References引用 引用是一种符合类型,是一种别名。 普通引用应该绑定到它的对象上。 不能把普通引用绑定到const类型,只能将其定义为const引用。 const int a = 100; const int &b=a; double a=1.0; int &b = a; // 不允许 const int &b = a; //允许。此处的a会被强制转换为int型。 6.t ypede f 名字 现有数据类型的同义词 7.Enumerations枚举 enum成员的值可以一样 // point2d is 2, point2w is 3, point3d is 3, point3w is 4 enum Points { point2d = 2, point2w, point3d = 3, point3w }; 枚举类型是唯一的类型,枚举成员是常量。不能将其他类型的值赋给枚举类型,只能在初始化的时候赋给 它,而且初始化的值也只能是常量表达式。
8.Class类
和Struct的区别,仅仅只是默认访问级别不同,class是p'rivate,而struct默认为public。
9.头文件的编写和预处理技术 头文件用于声明而不是定义,一些const对象可以定义在头文件里的时候,是需要用常量表达式初始化的。 避免重复包含,可以用预处理器变量 #ifndef SALESITEM_H #define SALESITEM_H // Definition of Sales_itemclass and related functions goes here // #endif #include <standard_header> //一般是这样来自定义头文件的,尖括号表示标准头文件
转载于:https://www.cnblogs.com/arctanx/p/5227106.html
