《Essential C++》 基础知识

以下是本人觉得有必要记录的关于C++的基本常识


对象初始化方式:


传统的与C相同的方式:        int num = 0;

构造函数语法:                     int num(0);

 

    “assignment运算符(=)进行初始化这个操作是沿袭C语言而来,如果对象属于内建型,或者对象可以单一值加以初始化,这种方式就没有问题。例如以下的string class:

String sequence_name = “Fibbonacci”;

如果对象需要多个初始值,这种方式就没有办法完成任务了。以标准程序库中的复数类为例,它就需要两个初始值,一个实部和一个虚部。以下便是用来处理“多值初始化”的构造函数初始化语法(constructor initialization syntax)

#include <complex>

complex <double> purei(0, 7)

 

 

运算符的优先级


运算符优先级简列于下,位置在上者的优先级高于位置在下者,同一行的各种运算符具有相同的优先级,其评估次序视出现在表达式中的位置而定(从左至右)。

逻辑运算符 NOT

算术运算符 (*, /, %

算术运算符 (+, -)

相对关联运算符 (<, >, <=, >=)

相对关联运算符 (==, !=)

逻辑运算符 AND

逻辑运算符 OR

赋值(assignment) 运算符

 

ArrayVector

 

定义 :

Array

const int seq_size = 18;

int pell_seqp[seq_size];

 

Vector:

#include <vector>

Vector<int> pell_seq( seq_size);

 

初始化:

Array

Int elem_seq[] = {1, 2, 3, 5};

 

Vector

Vector<int> elem_seq( seq_size )

elem_seq[0] = 1;

elem_seq[1] = 2;

//…

 

 

指针

 

type_of_object_point_to * name_of_pointer_object

 

    当我们调用一个函数时,会在内存中建立起一块特殊区域,称为“程序栈(program stack)”。这块特殊区域提供了每个函数参数的存储空间,它也提供函数所定义的每个对象的内存空间——我们称这些对象为local object(局部对象),一旦函数完成,这块内存就会被释放掉,或者说是从程序堆栈中被pop出来。


Pointer参数和reference参数二者之间更重要的差异

    pointer可能(也可能不)指向某个实际对象,当我们提领pointer时,一定要先确定其值并非为0,至于reference则必定会代表某个对象,所以不须做次检查。

if (p)          //判断p是否为NULL

{

         cout << *p << endl

}

 

动态内存管理

    不论local scopefile extent,对我们而言,都是由系统自动管理,第三种存储形式为dynamic extent(动态范围),其内存系由程序的自由空间(free store)配置而来,有时也称为heap memory(堆内存),此种内存必须由程序员自行管理,其配置是通过new表达式来达成的,而其释放则经由delete表达式完成。

 

new表达式的形式如下:

new Type;

此处的Type可为任意内建型别,也可以是程序指导的class型别,new表达式亦可写成:

new Type(initial_value);

例如:

int *pi;

pi = new int

便是先由heap配置出一个型别为int的对象,再将其地址赋值给pi,默认情形下,由heap配置而来的对象,均为经过初始化。

 


C++ 允许我们为所有参数或者部分参数设定为默认值。这样,当用户已单一参数调用函数式,不会出问题。

 

    关于默认参数值得同,有两个不甚直观的规则,第一个规则是,默认值的决议(resolve)操作由最右边开始进行,如果我们为某个参数提供了默认值,那么这个参数右侧的所有参数都必须也具有默认参数。

    第二个规则是,默认值只能够指定以此,可以在函数声明处,也可以在函数定义处,但是不能够在两个地方都指定。为了更高的可见度,我们通常将默认值置于函数声明处,而非定于出。(头文件)

 

 

局部静态对象(Local Static Object)

 

    为了节省函数间的通信问题而降对象定义于file scope内永远是一种冒险,通常,file scope对象会打乱不同函数间的独立性,使他们难以理解。

    局部静态对象与局部非静态对象不同的是,局部静态对象所处的内存空间,即使在不同的函数调用过程中,依然持续存在

 

inline只是对编译器提出的一种请求,编译器是否执行这项请求,需视编译器而定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值