c++学习(一)

编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor:#include) → 编译器 (compiler) → 汇编程序 (assembler) → 目标代码 (object code:.o或.obj文件) → 链接器 (Linker) → 可执行程序 (executables)。
  语法错误
  类型错误
  声明错误:从标准库中访问名字时忘记使用“std::”

Code::Blocks IDE:
http://www.codeblocks.org/
http://sourceforge.net/projects/codeblocks/files/Binaries/10.05/Windows/codeblocks-10.05-setup.exe/download
GCC编译器:
ftp://gd.tuwien.ac.at/gnu/gcc/releases/gcc-4.7.1/
http://blog.csdn.net/shengzhemi/article/details/6768932

http://www.skycn.com/soft/4639.html


1. main()函数:操作系统通过 main 函数返回的值来确定程序是否成功执行完毕。返回0值表明程序程序成功执行完毕。任何其他非零的返回值都有操作系统定义的含义。

2. 每个输出操作符实例都接受两个操作数:左操作数必须是 ostream 对象;右操作数是要输出的值。
3. endl 是一个特殊值,称为操纵符,将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区。
4. 条件是一个可求值的表达式,所以可以测试其结果。如果结果值非零,那么条件为真;如果值为零,则条件为假。

5. while (std::cin >> value)
   这里所产生的是,为判断条件,先执行输入操作。它具有从标准输入读取下一个数并且将读入的值保存
value 中的效果。输入操作符返回其左操作数。while 条件测试输入操作符的返回结果,意味着测试 std::cin。
当我们使用 istream 对象作为条件,结果是测试流的状态。如果流是有效的那么测试成功。遇到文件结束符或遇到无效输入时,如读取了一个不是整数的值,则 istream 对象是无效的。处于无效状态的 istream 对象将导致条件失败。

6. 操作系统使用不同的值作为文件结束符。Windows 系统下我们通过键入control—z——同时键入“ctrl”键和“z”键,来输入文件结束符。Unix 系统中,包括 Mac OS—X 机器,通常用 control—d。

7. 标准库的头文件用尖括号 < > 括起来,编译器将会在预定义的位置集查找该头文件,这些预定义的位置可以通过设置查找路径环境变量或者通过命令行选项来修改。非标准库的头文件用双引号 " " 括起来。

8. 点操作符通过它的左操作数取得右操作数。点操作符仅应用于类类型的对象:左操作数必须是类类型的对象,右操作数必须指定该类型的成员。

9. standard library(标准库):每个 C++ 编译器必须支持的类型和函数的集合。标准库提供了强大的功能,包括支持 IO 的类型。std标准库命名空间的名字。

10. << operator(<< 操作符)输出操作符。把右操作数写到左操作数指定的输出流:cout << "hi" 把 hi写入到标准输出流。输出操作可以链接在一起使用:cout << "hi << "bye"输出 hibye。
11. >> operator(>> 操作符)输入操作符。从左操作数指定的输入流读入数据到右操作数:cin >> i 把标准输入流中的下一个值读入到 i 中。输入操作能够链接在一起使用:cin >> i >> j 先读入 i 然后再读入 j。
12. C++ 是静态类型(statically typed)语言,在编译时执行类型检查。

13. 算术类型:
类型 含义 最小存储空间
bool boolean NA
char character 8bits
wchar_t wide character 16bits
short short integer 16bits
int 首选整型 integer 16bits
long long integer 32bits
float single-precision floating-point 6 significant digits 32位
double首选浮点型 double-precision floating-point 10 significant digits 64位


无符号型只能表示大于或等于 0 的数。整型 int、short 和 long 都默认为带符号型。要获得无符号型则必须指定该类型为 unsigned,比如 unsigned long。unsigned int 类型可以简写为unsigned。
虽然 char 类型是整型,但是 char 类型通常用来存储字符而不用于计算。事实上,在某些应用中char 类型被当作 signed 类型,在另外一些应用中则被当作 unsigned
类型,因此把 char 类型作为计算类型使用时容易出问题。
单精度浮点数:符号位1位、指数位8位、尾数位23位。
双精度浮点数:符号位1位、指数位11位、尾数位52位。

14. 以 0(零)开头的字面值整数常量表示八进制,以 0x 或 0X 开头的表示十六进制。
  字面值整数常量的类型默认为 int 或 long 类型。
  默认的浮点字面值常量为 double 类型。
  单词 true 和 false 是布尔型的字面值。
15. 为了兼容 C 语言,C++ 中所有的字符串字面值都由编译器自动在末尾添加一个空字符。
16. 变量名,即变量的标识符,可以由字母、数字和下划线组成。变量名必须以字母或下划线开头,并且区分大小写字母。标识符不能包含两个连续的下划线,也不能以下划线开头后面紧跟一个大写字母。有些标识符(在函数外定义的标识符)不能以下划线开头。
17. C++ 支持两种初始化变量的形式:复制初始化和直接初始化。复制初始化语法用等号(=),直接初始化则是把初始化式放在括号中。
18. 内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始化成 0,在函数体里定义的内置类型变量不进行自动初始化。
19. 如果定义某个类的变量时没有提供初始化式,这个类也可以定义初始化时的操作。它是通过定义一个特殊的构造函数即默认构造函数来实现的。这个构造函数之所以被称作默认构造函数,是因为它是“默认”运行的。如果没有提供初始化式,那么就会使用默认构造函数。不管变量在哪里定义,默认构造函数都会被使用。
20. 变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。
声明用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。可以通过使用extern 关键字声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern。
21. const定义常量,不可修改。与其他变量不同,除非特别说明,在全局作用域声明的 const 变量是定义该对象的文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问。要使 const 变量能够在其他的文件中访问,必须地指定它为 extern。非 const 变量默认为 extern。在全局作用域里定义非 const 变量时,它在整个程序中都可以访问。
22. 引用是一种复合类型,通过在变量名前添加“&”符号来定义。复合类型是指用其他类型定义的类型,引用必须用与该引用同类型的对象初始化。因为引用只是它绑定的对象的另一名字,作用在引用上的所有操作事实上都是作用在该引用绑定的对象。当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象。不可能将引用绑定到另一个对象。
23. *const 引用是指向 const 对象的引用。非 const 引用只能绑定到与该引用同类型的对象。const 引用则可以绑定到不同但相关的类型的对象或绑定到右值。
  const int ival = 1024;
  const int &refVal = ival;

  double dval = 3.14;
  const int &ri = dval;
  编译器会把这些代码转换成如以下形式的编码:
  double dval = 3.14;
  int temp = dval;
  const int &ri = temp;
24. typedef 数据类型 标识符:可以用来定义类型的同义词。
25. 定义枚举:enum 枚举类型名{A,B,C};默认地,第一个枚举成员赋值为 0,后面的每个枚举成员赋的值比前面的大1。可以为一个或多个枚举成员提供初始值,用来初始化枚举成员的值必须是一个常量表达式。常量表达式是编译器在编译时就能够计算出结果的整型表达式。枚举成员值可以是不唯一的。不能改变枚举成员的值。
26. 类体的花括号后面必须要跟一个分号。访问标号 public、private 可以多次出现在类定义中。给定的访问标号应用到下一个访问标号出现时为止。
27. 头文件为相关声明(不是定义)提供了一个集中存放的位置。头文件一般包含类的定义、extern变量的声明和函数的声明。大多数编译器都提供了分别编译每一个文件的方法。通常这个过程产生 .o 文件,.o 扩展名暗示该文件含有目标代码。头文件可以定义类、值在编译时就已知道的 const 对象和 inline 函数。
28. 定义只可以出现一次,而声明则可以出现多次。同一个程序中有两个以上源文件含有一个定义都会导致多重定义链接错误。因为头文件包含在多个源文件中,所以不应该含有变量或函数的定义。
29. 预处理:#include 指示只接受一个参数:头文件名。预处理器用指定的头文件的内容替代每个 #include。
30. 预处理器变量的名字在程序中必须是唯一的。任何与预处理器变量相匹配的名字的使用都关联到该预处理器变量。
预处理器变量有两种状态:已定义或未定义。#define 指示接受一个名字并定义该名字为预处理器变量。#ifndef 指示检测指定的预处理器变量是否未定义。如果预处理器变量未定义,那么跟在其后的所有指示都被处理,直到出现 #endif。

原文地址:https://www.cnblogs.com/yshb/p/2673906.html