网站做代练,ps如何做网站导航图,互联网彩票网站开发,wordpress08上次面试体验不好#xff0c;记录了#xff0c;这次同样记录一次体验不好的面试#xff0c;中望软件…直接写了名字#xff0c;因为真的很无语#x1f613;
记录一下我不知道的问题
忘记录音了#x1f622;
1. main函数之前做了什么#xff1f;
我#xff1a;实话我…上次面试体验不好记录了这次同样记录一次体验不好的面试中望软件…直接写了名字因为真的很无语
记录一下我不知道的问题
忘记录音了
1. main函数之前做了什么
我实话我真没思路 网上查的 初始化操作初始化静态static变量和global全局变量即.data段的内容 全局对象初始化在main之前调用构造函数并为它们赋初值。 疑惑这个图有问题吧地址反了下面这个看起来像是对的 传参将main函数的参数argcargv等传递给main函数然后才真正运行main函数。 设置栈设置栈指针栈指针stack pointer 栈指针寄存器正常情况下存放栈顶地址 base pointer 基址寄存器正常情况用于访问栈底地址。
拓展
在 C 和 C 编程语言中__attribute__((constructor)) 是一个 GCC 扩展它允许开发人员指定一个函数以便在程序开始运行时在执行 main() 之前自动调用。 该函数通常称为“构造函数”。 __attribute__((constructor)) 语法用于指定应在程序启动时自动调用特定函数。 这对于初始化全局变量或设置程序正确运行所需的资源很有用。 例如构造函数可用于初始化日志系统或建立数据库连接。 通过使用构造函数可以在程序开始运行之前自动设置这些资源而无需在 main() 中显式初始化。 重要的是要注意构造函数的调用顺序是无法保证的。 如果构造函数之间存在依赖关系则必须注意确保以正确的顺序调用它们。 此外构造函数不能依赖于其他全局变量的状态因为它们可能尚未初始化。 总体而言__attribute__((constructor)) 是在执行 main() 之前初始化资源和设置程序环境的有用工具。 它在具有许多全局变量和复杂初始化要求的大型程序或库中特别有用。在 C 和 C 编程语言中__attribute__((destructor)) 是一个 GCC 扩展允许开发人员指定一个函数在程序正常退出时在 main() 执行完毕后自动调用。 该函数通常称为“析构函数”。 __attribute__((destructor)) 语法用于指定应在程序退出时自动调用特定函数。 这对于在程序退出前执行清理操作或保存程序状态很有用。 例如析构函数可用于关闭打开的文件、释放分配的内存或将数据写入日志文件。 通过使用析构函数这些清理操作可以在程序退出时自动执行即使程序意外退出也是如此。
2. 静态多态是什么
一脸懵逼。
静态多态也称为编译期间的多态编译器在编译期间完成的编译器根据函数实参的类型(可能会进行隐式类型转换)可推断出要调用那个函数如果有对应的函数就调用该函数否则出现编译错误。 静态多态有两种实现方式
函数重载包括普通函数的重载和成员函数的重载 函数模板的使用。
函数重载 在相同的作用域中如果函数具有相同名字而仅仅是形参表不同此时成为函数重载。注意函数重载不能基于不同的返回值类型进行重载。
main函数不能被重载。
3. 基于const的重载
其实带const的成员函数和不带const的成员函数的this指针是不同的
const的成员函数的this指针是const A类型的不带const的成员函数的this指针是A类型的这里的A就是代码中定义的类借用一下上面的定义。
比如
Class A {int function ();int function () const;};可以看到在A类中function函数是发生重载了而且是合法的。而且在调用时只用A类的const对象才能调用const版本的function函数而非const对象可以调用任意一种通常非const对象调用不是const版本的function函数。
原因是按照函数重载的定义函数名相同而形参表有本质不同的函数称为重载。在类中由于隐含的this形参的存在const版本的function函数使得作为形参的this指针的类型变为指向const对象的指针而非const版本的使得作为形参的this指针就是正常版本的指针。此处是发生重载的本质。重载函数在最佳匹配过程中对于const对象调用的就选取const版本的成员函数而普通的对象调用就选取非const版本的成员函数。
注this指针是一个const指针地址不能改但能改变其指向的对象或者变量
4. int A 10A是右值吗
一个区分左值与右值的便捷方法是看能不能对表达式取地址如果能则为左值否则为右值。
被面试官绕晕了 A是一个右值引用A本身是个左值吧…
5. 移动构造函数
我感觉我答得没有问题…但是面试官无语的表情不懂
移动语义指的就是将其他对象通常是临时对象拥有的内存资源“移为已用”。 移动构造函数的初值是一个右值引用。意味着移动构造函数的参数是一个右值或者将亡值的引用。
6. 前序和后序遍历为什么不能得到树
我 因为可能有不同的树结构得到相同的遍历结果。
拓展
1. map和unodered_map区别
1、底层实现方式
map内部使用红黑树一种自平衡二叉查找树来实现而unordered_map则使用哈希表来实现。这意味着在map中元素是按照键的大小进行有序排列的而在unordered_map中则不保证元素的顺序。
2、性能表现
当需要有序地遍历元素时map的性能比unordered_map更好。但是当需要快速查找特定的元素时unordered_map通常比map更快。原因在于map在插入和删除操作时需要维护红黑树的平衡而unordered_map则只需要计算哈希值并将元素放入相应的桶中即可。
3、用途
由于map可以保证元素的有序性所以适合用于需要有序的情况下例如按照键排序输出元素、寻找最小值/最大值等。而unordered_map则适合用于需要快速查找元素的情况下例如查找是否存在某个键值对、统计某个值出现的次数等。
总之选择map还是unordered_map取决于具体的需求。如果需要有序地处理元素则应该使用Map如果需要快速查找元素则可以使用unordered_map。
2. 指针和引用的区别
1、引用不可以为空但指针可以为空。 2、引用不可以改变指向对一个对象至死不渝但是指针可以改变指向而指向其它对象。 3、引用的大小是所指向的变量的大小因为引用只是一个别名而已指针是指针本身的大小4个字节。 4、引用比指针使用起来形式上更漂亮使用引用指向的内容时可以之间用引用变量名而不像指针一样要使用*定义引用的时候也不用像指针一样使用取址。 5、引用比指针更安全。由于不存在空引用并且引用一旦被初始化为指向一个对象它就不能被改变为另一个对象的引用因此引用很安全。对于指针来说它可以随时指向别的对象并且可以不被初始化或为NULL所以不安全。const指针虽然不能改变指向但仍然存在空指针并且有可能产生野指针即多个指针指向一块内存free掉一个指针之后别的指针就成了野指针。
底层 引用也是一个指针const指针只是使用时底层编译器我们转化了一下 *(ref)