c++函数参数和返回值
c++一直以来是一个关注效率的代码,这样关于函数的参数传递和返回值的接收,是重中之重。下文提供了一些个人的见解。
函数存储位置
函数参数在编译期展开,目前各平台的编译期均有不同。
名称存储位置函数名称和逻辑代码段存储函数参数和返回值栈中或者寄存器(64位会有6个寄存器使用)new malloc 的变量堆函数参数入栈顺序
微软有几种编译期属性,用来定义函数参数的顺序和堆栈。
关键字堆栈清理参数传递__cdecl调用方在堆栈上按相反顺序推送参数(从右到左)__clrcall不适用按顺序将参数加载到 CLR 表达式堆栈上(从左到右)。__stdcall被调用方在堆栈上按相反顺序推送参数(从右到左)__fastcall被调用方存储在寄存器中,然后在堆栈上推送__thiscall被调用方在堆栈上推送;存储在 ECX 中的 this 指针__vectorcall被调用方存储在寄存器中,然后按相反顺序在堆栈上推送(从右到左)所以直接在函数参数上,调用表达式和函数来回去值的话,非常危险
初始化列表
[code]class Init1{public: void Print() { std::cout |