广元市建设局网站首页,wordpress 分享到qq空间,正邦logo设计,科技企业网站建设模板一、static 关键字的作用#xff0c;及和const的区别 static关键字作用#xff1a; 1、在类的成员变量前使用#xff0c;表示该变量属于类本身#xff0c;而不是任何类的实例。 2、在类的成员函数前使用#xff0c;表示该函数不需要对象实例即可调用#xff0c;且只能访问…一、static 关键字的作用及和const的区别 static关键字作用 1、在类的成员变量前使用表示该变量属于类本身而不是任何类的实例。 2、在类的成员函数前使用表示该函数不需要对象实例即可调用且只能访问类的静态成员变量和其他静态成员函数。 3、在局部变量前使用表示该变量在函数调用结束后不会被销毁而是保持其值不变。 4、在全局变量或函数前使用限制其作用范围仅在定义的文件内对其他文件不可见。
static和const区别 1、static关键字用来定义静态变量其生命周期为程序执行期间但它的作用域限定于定义它的文件或函数内。 2、const关键字定义常量其值在定义后不能被修改用来保证数据的不变性。它只影响它所修饰的变量的可变性而不影响其生命周期。
二、extern 关键字的作用 主要作用是 1、允许在多个文件中访问同一个全局变量或函数。 2、表明变量或函数的定义存在于其他文件中。
三、指针和引用的区别
1、指针是一个变量其值为另一个变量的地址通过地址可以直接访问和修改对应内存中的值。 2、引用是别名它为对象提供了一个新的名字对引用的操作等同于对对象本身的操作。 3、指针可以为空引用必须绑定到一个对象。 4、指针的值即所指对象的地址可以改变但引用一旦与某个对象绑定就不能再改变引用到其他对象。
四、c内存分配的方式
1、静态存储编译时分配如全局变量、静态变量。 2、自动存储函数内部声明的变量如局部变量随着函数调用创建和退出销毁。 3、动态存储使用new和delete进行手动分配和释放的堆内存。
五、静态内存分配和动态内存分配的区别静态分配的优缺点
区别 1、静态内存分配在编译时就确定了存储空间的大小和生命周期通常用于全局变量和静态局部变量。 2、动态内存分配在运行时根据需要动态地分配和释放内存通常使用new和delete操作符。
静态内存分配的优点 1、管理简单没有额外的运行时开销。 2、生命周期长随程序启动创建程序结束时销毁。
静态内存分配的缺点 1、灵活性低必须提前预知并定义所需内存大小。 2、可能会导致内存浪费若预分配内存未被充分利用
六、讲一下c智能指针及shared_ptr的底层实现 unique_ptr独占所有权不支持复制和赋值操作。 shared_ptr引用计数机制多个智能指针可以共享同一个对象。 weak_ptr不对对象的所有权计数用于解决shared_ptr的循环引用问题。
shared_ptr的底层实现 包括两个主要部分 1、控制块存储引用计数和指向动态分配的对象的指针。 2、智能指针对象包含对控制块的引用。
七、map 和 unordered_map 区别 map 1、基于红黑树实现。 2、元素按键自动排序。 3、查找、插入和删除操作的时间复杂度为O(log n)。
unordered_map 1、基于哈希表实现。 2、元素不排序按哈希值存储。 3、平均情况下查找、插入和删除操作的时间复杂度为O(1)最坏情况为O(n)。
八、STL有哪些容器各自特点
序列容器: 1、vector动态数组支持快速随机访问。 2、list双向链表支持快速插入和删除。 3、deque双端队列两端都可以快速插入和删除。
关联容器: 1、set集合元素唯一且自动排序。 2、map键值对集合键唯一且自动排序。 3、multiset集合元素可以重复自动排序。 4、multimap键值对集合键可以重复自动排序。
无序关联容器C11新增: 1、unordered_set集合元素唯一基于哈希表实现不排序。 2、unordered_map键值对集合键唯一基于哈希表实现不排序。 3、unordered_multiset集合元素可以重复基于哈希表实现不排序。 4、unordered_multimap键值对集合键可以重复基于哈希表实现不排序。
适配器容器: 1、stack栈后进先出。 2、queue队列先进先出。 3、priority_queue优先队列元素按优先级出队。