龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C和C++语言学习总结(二)(5)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
对于任何内联函数,编译器在符号表里放入函数的声明(包括名字、参数类型、返回值类型).如果编译器没有发现内联函数存在错误,那么该函数的代码也被放

  对于任何内联函数,编译器在符号表里放入函数的声明(包括名字、参数类型、返回值类型).如果编译器没有发现内联函数存在错误,那么该函数的代码也被放入符号表里.在调用一个内联函数时,编译器首先检查调用是否正确(进行类型安全检查,或者进行自动类型转换,当然对所有的函数都一样).如果正确,内联函数的代码就会直接替换函数调用,于是省去了函数调用的开销.这个过程与预处理有显著的不同,因为预处理器不能进行类型安全检查,或者进行自动类型转换.假如内联函数是成员函数,对象的地址(this)会被放在合适的地方,这也是预处理器办不到的.

  内联函数使用方法:

  关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用.

  正确使用方法:

void Foo(int x, int y);

inline void Foo(int x, int y) // inline 与函数定义体放在一起

{

}

  错误使用方法:

inline void Foo(int x, int y); // inline 仅与函数声明放在一起

void Foo(int x, int y)

{

}

  6、构造和析构的次序

  构造从类层次的最根处开始,在每一层中,首先调用基类的构造函数,然后调用成员对象的构造函数.析构则严格按照与构造相反的次序执行,该次序是唯一的,否则编译器将无法自动执行析构过程.

  String函数定义

class String

{

public:

String(const char *str = NULL); // 普通构造函数

String(const String &other); // 拷贝构造函数

~ String(void); // 析构函数

String & operate =(const String &other); // 赋值函数

private:

char *m_data; // 用于保存字符串

};

// String 的析构函数

String::~String(void)

{

delete [] m_data;// 由于m_data 是内部数据类型,也可以写成delete m_data;

}

// String 的普通构造函数

String::String(const char *str)

{

if(str==NULL)

{

精彩图集

赞助商链接