c++primer读书笔记(二)--根蒂根基常识下
添加时间:2013-8-6 点击量:
1.const
const int a = 23 ;
const 对象默认为文件的局部变量
假如const int a = 23定义在file1.c中,那么同一个法度中的file2文件就无法经由过程extern来应用file1中的a了 然则
// file1
extern const int a =12 ;
// file2
extern const int a ; // use a file1
非const变量默认为extern,要使const变量能在其他文件中接见,必须显示的指定为extern
2. reference: 对象的另一个名字。
不克不及定义引用类型的引用,但可以定义任何其他类型的引用。
引用必须用与该引用同类型的对象初始化
int ival = 1024 ;
int &refval0 = ival ; // ok
int &refval1 ; // error :must be intialzed
int &refval2 = 10 ; // error :initilizer must be an object
当引用初始化后,只要该引用存在,它就对峙绑定到初始化时指定的对象。不成能将引用绑定到另一个对象。
初始化时指明引用指向那个对象的独一办法。
const 引用:指向const对象的引用。
const int ival = 1024 ;
const int &refval = ival ;//ok: both reference and object are const
int &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 非体系头文件,非体系头文件的查找凡是开端于源文件地点的路径。
1.const
const int a = 23 ;
const 对象默认为文件的局部变量
假如const int a = 23定义在file1.c中,那么同一个法度中的file2文件就无法经由过程extern来应用file1中的a了 然则
// file1
extern const int a =12 ;
// file2
extern const int a ; // use a file1
非const变量默认为extern,要使const变量能在其他文件中接见,必须显示的指定为extern
2. reference: 对象的另一个名字。
不克不及定义引用类型的引用,但可以定义任何其他类型的引用。
引用必须用与该引用同类型的对象初始化
int ival = 1024 ;
int &refval0 = ival ; // ok
int &refval1 ; // error :must be intialzed
int &refval2 = 10 ; // error :initilizer must be an object
当引用初始化后,只要该引用存在,它就对峙绑定到初始化时指定的对象。不成能将引用绑定到另一个对象。
初始化时指明引用指向那个对象的独一办法。
const 引用:指向const对象的引用。
const int ival = 1024 ;
const int &refval = ival ;//ok: both reference and object are const
int &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 非体系头文件,非体系头文件的查找凡是开端于源文件地点的路径。