码迷,mamicode.com
首页 > 编程语言 > 详细

C++/C函数

时间:2017-09-02 18:02:16      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:typedef   cal   析构   堆栈   引用   全局变量   加载   内存   this   

函数堆栈的三个用途:

1.进入函数前保存环境变量和返回地址;

2.进入函数时保存实参的拷贝;

3.保存函数体内的局部变量。

 

函数调用规范:定义函数实参压栈,退栈以及堆栈释放方式。

1._cdecl:函数默认规范,参数从右到左依次压栈,便于可变参数函数,C++静态成员函数和友元函数使用此规范。

2._thiscall:C++非静态成员函数的默认规范,不能使用可变参数。当非静态成员函数调用时,this指针直接保存在ECX寄存器中,而不是函数堆栈。

 

函数连接规范:

1.通用的C连接规范:

#ifndef _cplusplus

extern "C" {

#endif

 

#ifndef _cplusplus

}

#endif

 

函数参数:

1. C包括值传递和地址传递,C++增加了引用传递(引用的创建和销毁不会调用对象的构造函数和析构函数)。

2. C无参函数需要使用void,否则认为接受任何类型和个数的参数。而C++无参数函数则表示不接受任何参数。

 

函数返回值:

1. C不加函数返回值类型的函数,统一当成int处理,而C++不允许没有返回值类型。

2. C++返回值为引用,如果返回值为内部局部变量,则会导致引用无效内存。

3.返回值效率,如:

1). return String(a);

临时变量创建并初始化在外部存储区,省去了拷贝和析构开销。

2). String result(a);

   return result;

result对象被创建,调用构造函数初始化。接着调用拷贝构造函数,把result对象复制到保存返回值的外部存储区,最后在函数结束时调用析构函数销毁result对象。

 

存储类型:

全局变量和全局函数:extern

全局常量:static

局部变量:   auto

register类型则加载到CPU寄存器中,减少和内存的交互开销,一般为循环计数器。

 

连接类型:

1.外连接:在别的编译单元中被调用,如全局变量和全局函数或者被extern修饰的全局常量。

2.内连接:仅在一个编译单元被调用,如全局常量,static修饰的变量,类,匿名联合体,typedef定义。

3.无连接:函数的局部变量或局部类。

 

C++/C函数

标签:typedef   cal   析构   堆栈   引用   全局变量   加载   内存   this   

原文地址:http://www.cnblogs.com/liaoyiwang/p/7466975.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!