C/C++

三十一、对于一维数组来说,数组作为函数参数传递,实际上传递了一个指向数组的指针,在C编译器中,当数组名作为函数参数时,在函数体内数组名自动退化为指针。此时调用函数时,相当于传址而不是传值,会改变数组元素的值。

三十二、

a)    union是一种特殊的类,也是一种构造类型的数据结构。在一个union内可以定义多种不同的数据类型,这些数据共享同一段内存,以达到节省空间的目的。故data内的每个成员起始地址都相同。

b)    在任意时刻,union中只能有一个数据成员可以有值。当给联和中某个成员赋值之后,该联合中的其他成员就变成了未定义状态。

c)    union长度取决于其中定义的最长数据成员。故变量data所占内存字节数与成员c所占字节数相等。       

三十三、       函数

       inline是C++关键字,在函数声明或定义中,函数返回类型前加上关键字inline,即可以把函数指定为内联函数。这样可以解决一些频繁调用的函数大量消耗栈空间(栈内存)的问题。关键字inline必须与函数定义放在一起才能使函数成为内联函数,仅仅将inline放在函数声明前面不起任何作用。inline是一种“用于实现”的关键字,而不是一种“用于声明”的关键字。

       inline的优劣:

       优点:增加函数体积,exe太大,占用CPU资源,可导致cache装不下(减小了cache的命中),不方便调试,debug下一般不内联,每次修改会重新编译头文件增加编译时间。注意:inline只是一个请求,编译器有权利拒绝。有7种情况下都会拒绝,虚调用,体积过大,有递归,可变数目参数,通过函数指针调用,调用者异常类型不同,declspec宏等。

       forceinline字面上意思是强制内联,一般可能只是对代码体积不做限制,但是对于上面的情况仍然不会内联,如果没有内联,它会返回一个警告。构造函数析构函数不建议内联,里面可能会有编译器优化后添加的内容,比如初始化列表里面的东西。

三十四、关系运算符>逻辑运算符(特别低)

posted @ 2020-06-14 14:44  烟火流沙  阅读(167)  评论(0编辑  收藏  举报