1.const
const int a = 23 ;
const 对象默认为文件的局部变量
假如const int a = 23定义在file1.c中,那么同一个程序中的file2文件就无法通过extern来使用file1中的a了 但是
// file1extern const int a =12 ;// file2extern const int a ; // use a from file1
非const变量默认为extern,要使const变量能在其他文件中访问,必须显示的指定为extern
2. reference: 对象的另一个名字。
不能定义引用类型的引用,但可以定义任何其他类型的引用。
引用必须用与该引用同类型的对象初始化
int ival = 1024 ;int &refval0 = ival ; // okint &refval1 ; // error :must be intialzedint &refval2 = 10 ; // error :initilizer must be an object
当引用初始化后,只要该引用存在,它就保持绑定到初始化时指定的对象。不可能将引用绑定到另一个对象。
初始化时指明引用指向那个对象的唯一办法。
const 引用:指向const对象的引用。
const int ival = 1024 ;const int &refval = ival ;//ok: both reference and object are constint &refval = ival ; // error: nonconst reference to a const object
可以读取但不能修改refval
即:const 引用是指向const 的引用
const引用可以初始化为不同类型的对象或者初始化为右值,如字面值常量:
int i = 42 ;const int &r = 42 ;const int &t = r + i ;double dval = 3.14 ;const int &r=dval ;
编译器会把这些代码转化成如下形式的编码:
int temp = dval ;const int &r = temp ;
?????double dval = 3.14 ; const double &ival = dval ?????????
非const引用只能绑定到与该引用同类型的对象。
const引用则可以绑定到不同但相关的 类型的对象或者绑定到右值。
3.
class A{ public: ... private: ...} ;
编程新手经常会忘记类定义后面的分号,这是一个很普遍的错误!
定义类数据成员与定义变量有非常重要的区别:一般不能把类成员的初始化作为其定义的一部分。当定义数据成员时,只能指定该数据成员的名字和类型。
4.
struct A{ // operation private: // data};
struct和 class关键字定义类的唯一差别在于默认访问级别:默认情况下,struct的成员为public,而class的成员为private。
5. 头文件包含在多个源文件中,所以不应该含有变量或函数的定义。但是头文件可以定义类,值在编译时就已经知道的const对象和inline函数。这些实体可以在多个源文件中定义,只要每个源文件中的定义是相同的。
6.预处理器:
#include设施是c++预处理器(preprocessor)的一部分。
系统的头文件可能用特定于编译器的更高效的格式保存。
头文件可以包含其他头文件,因此,设计头文件时,应该使其可以多次包含在同一源文件中。我们必须保证多次包含同一头文件不会引起该头文件定义的类和对象被多次定义。
使得头文件安全的通用做法,是使用预处理器定义头文件保护符(header guard)。
预处理器常量的名字在程序中必须是唯一的。任何与预处理器常量相匹配的名字的使用都关联到该预处理器常量。为避免名字冲突,预处理器常量经常用全大写字母表示。
可以如下避免同一个头文件被多次定义:
#ifndef CAR_H#define CAR_H // definition of class car and related function goes here #endif
头文件应该含有保护符,即使这些头文件不会被其他头文件包含。编写头文件保护符并不困难,而且如果头文件被包含多次,它可以避免难以理解的编译错误。
我们可以用定义在头文件中的实体(如类)来命名预处理器常量来避免预处理器常量重名的问题。
#include <iostream> 标准头文件,编译器会在预定义的位置集查找该头文件,这些预定义的位置可以通过设置查找路径环境变量或者通过命令行选项来修改。使用的查找方法因编译器的不同而差别迥异。
#include "our_header.h" 非系统头文件,非系统头文件的查找通常开始于源文件所在的路径。