C++面试问题精选 0513

2024-05-15 08:28
文章标签 c++ 问题 面试 精选 0513

本文主要是介绍C++面试问题精选 0513,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、有一个类包含static成员变量,并且这个类的构造函数中包含一个死循环,可以删除 main 函数吗?

在C++中,如果你有一个类包含static成员变量,并且这个类的构造函数中包含一个死循环(即无限循环),那么这通常不是一个好的设计选择,因为这会导致任何尝试创建该类实例的操作都被阻塞。

不可以删除main函数。在C++程序中,main函数是程序的入口点。没有main函数,编译器将无法知道从哪里开始执行你的程序。即使你有一个类并且它的行为是某种后台任务或长时间运行的服务,你也需要一个main函数来启动这个程序。

2、C++,多线程访问一个函数,函数中有一个 static 局部变量,局部变量会初始化几次,有线程安全问题吗?

在 C++11 及其以后的标准中,引入了线程安全的静态局部变量初始化机制。这一机制确保当多个线程并发访问一个包含 static 局部变量的函数时,该静态变量只会被安全地初始化一次,从而避免了竞争条件。

具体机制

当一个函数包含一个 static 局部变量时,该变量的初始化是延迟到该函数第一次被调用时进行的。在 C++11 之前,如果多个线程同时调用该函数,可能会导致竞争条件,使得静态变量被初始化多次或者初始化过程出现不一致的状态。

为了避免这种情况,C++11 引入了以下机制:

  1. 一次性初始化保证:C++11 及其后的标准确保 static 局部变量在程序的整个生命周期内只会被初始化一次。
  2. 线程安全性保证:如果多个线程同时进入初始化代码段,编译器和运行时系统会确保只有一个线程执行初始化代码,其他线程会等待初始化完成。
3、vector 插入元素,扩容,缩小容量

插入元素

std::vector 插入元素可以使用以下几种方法:

  1. push_back:在 vector 的末尾添加一个元素。
  2. insert:在指定位置插入一个或多个元素。
  3. emplace_back:在 vector 的末尾原地构造一个元素。

扩容

vector的扩容通常是通过reserve()函数实现的,它会预分配一定数量的空间,以便vector可以容纳更多元素而不需要频繁地重新分配内存。

缩小容量

vector的容量可以通过shrink_to_fit()函数缩小,它会尽可能减少vector的内存占用。

C++中使用vector::resize()函数来调整vector的大小?

在C++中,vector::resize()函数用于调整vector的大小。这个函数有两个重载版本:

  1. void resize(size_type n): 此版本的resize()函数会将vector的大小更改为n。如果n小于vector的当前大小,则vector会缩小到前n个元素,并删除超出范围的元素。如果n大于vector的当前大小,则vector会在末尾插入足够的元素以达到n的大小。对于基本数据类型(如intfloat等),新添加的元素会被初始化为0。而对于类类型,如果类有默认构造函数,新添加的元素会被初始化为该默认构造函数的返回值。
  2. void resiz

这篇关于C++面试问题精选 0513的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991318

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异