传值与传址
传值:只是讲其的值进行复制,再在函数里进行改变,但实际上,那个地址上的值没有任何变动
在调用函数时,会创建一块栈空间,保存了这个模块中的形参,一旦函数执行完毕,就会pop。
过程就是 sub mov add
当我们将vec[ix]这样的对象传入函数,默认情况下其值会被复制一份,成为意义上的形参。
传址:直接对地址上的值进行变动
inline函数
1 |
|
上面的例子就是标准的内联函数的用法,使用inline修饰带来的好处我们表面看不出来,其实,在内部的工作就是在每个for循环的内部任何调用dbtest(i)的地方都换成了(i%2>0)?”奇”:”偶”,这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。
(不懂的可以拿poc去gcc,看汇编分析)
local static
1 | const vector<int>* |
此处elem被定义为局部静态变量,局部静态变量的含义是: 局部静态变量所处的内存空间,即使在不同的函数调用过程中,依然持续存在。
例子:
1 |
|
函数重载
函数名可以相同,参数不同(类型,个数)