首页 > 编程语言 >C++面试题整理 2

C++面试题整理 2

时间:2024-09-17 19:24:41浏览次数:1  
标签:std 面试题 调用 函数 子类 C++ 线程 整理

8. C++11新特性又哪些

自动类型推导auto,智能指指针(share_ptr,unique_ptr等),for循环简化,线程相关的(std::thread/std::mutex),空指针nullptr,lambda表达式,等等

9. share_ptr是线程安全的吗

share_ptr里包含引用计数和数据指针,引用计数是原子操作,线程安全的,但是改变数据指针的指向,后导致引用技术加减,并不是线程安全的。设想当一个share_ptr的引用计数为1,这时两个线程同时对它赋值,改变其数据指向,则会引起引用计数减小2次,引起crash。

10. 线程间同步有哪些方法

主要有锁/临界区(lock/mutex),条件变量(condition variable)和future。

  • std::unique_lock<std::mutex>或 std::lock_guard<std::mutex>可以保证一次只有一个线程访问临界区
  • std::condition_variable 可以通过wait方法阻塞线程,另一个线程可以通过Notify方法进行通知
  • std::future配合std::async使用,可以异步开启线程,并存储返回结果,另一线程通过future的wait或get方法可以阻塞线程,直至结果返回。

参考资料:

  1. C++11 线程同步接口std::condition_variable和std::future的简单使用

11. 虚函数多态的实现机制

虚函数多态主要指的是基类指针(引用)调用虚函数,若基类指针(引用)指向的是派生类,则自动调用派生类的虚函数。其实现机制是通过虚函数表虚表指针。在含有虚函数的类编译时,会自动生成相应的虚函数表和虚表指针,虚函数表里对于派生类重写的虚函数,会替换成重写后的虚函数地址。这样派生类赋值给基类时,实际上是基类之类指向的是派生类的虚表指针和虚函数表,调用的就是派生类的虚函数了。

12. 子类构造函数中调用虚函数会怎么样

子类在构造时会先调用父类构造,再调用子类构造,所以在子类中调用虚函数,如果子类重写了,会调用重写后的子类函数,没有重写的话,仍会调用父类函数。

  • 注意:如果在父类构造中调用虚函数,则子类继承后总会调用父类的虚函数,如果虚函数为纯虚,会产生链接错误。

另外尽量不要在构造中调用虚函数,参见《effective C++》条款9--绝不在构造和析构过程中调用virtual函数

13. 介绍下C++ 11中的移动语义

移动语义即std::move关键字的使用,配合移动构造,可以将临时变量直接进行构造,节省一次赋值操作和临时变量的析构,提高了效率。

14. std::vector中插入元素的push_back与embrace_back有什么区别

embrace_back是C++11中新的接口,由于C++11有了移动语义,对于vector中插入元素,也用移动语义重写了,对于临时元素可以移动构造,节省了空间,提高了效率

更多

标签:std,面试题,调用,函数,子类,C++,线程,整理
From: https://www.cnblogs.com/stephen2023/p/18417048

相关文章

  • C++前后缀分解
    相关知识点C++算法与数据结构打开打包代码的方法兼述单元测试这个算法很容易想到,学习了本文后,可以更快得想到。前后缀分解分治法的一种,将数组和字符串,拆分成前缀和后缀。字符串(数组)的前缀是字符串的前i个元素:s.substr(0,i-1),即s[0]......
  • C++类和对象
    1.类的定义1.1类的格式(1)class为定义的类关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面要跟分号。(2)为了区分类中的成员变量,一般我们命名的时候会在前面加上_或m开头,这个不是硬性要求。(3)C++中也兼容struct的用法,struct升级成了类,但他仍兼容C语言的用法,同......
  • C++模板函数实现类型推导
    C++模板函数实现类型推导以快读函数举例说明无法类型推导的情况template<typenameT>inlineTread(){Tx=0;intf=1;charch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar(......
  • VScode快速配置c++(菜鸟版)
    1.vscode是什么VisualStdioCode简称VSCode,是一款跨平台的、免费且开源的现代轻量级代码编辑器,支持几乎主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性,也拥有对git的开箱即用的支持。同时,它还支持插件扩展,通过丰......
  • C++内存管理详解:各类变量的存储区域
      在C++中,变量的存储位置取决于它们的类型和生命周期。那么不同的各个变量究竟存储在哪个区域呢?1.不同类型的变量我们首先从变量类型的不同来说明:1.全局变量和静态变量 -存储区:全局/静态区(静态区)-说明:全局变量(包括文件级和函数级的)和使用`static`关键字声明的变......
  • C++的类与对象下
    目录1.初始化列表2.隐式类型转换1.单参数2.多参数(C++11提供的新功能)3.static成员4.友元5.内部类6.匿名对象1.初始化列表C++祖师爷规定初始化列表是成员变量定义与初始化的地方。classTime{public: Time(inthour) :_hour(hour) { cout<<"Time()"<<......
  • 4.C++中程序中的命名空间
    咱们在前面的程序中,提到过使用usingnamespacestd;引入这个命名空间,那么std就是由编程系统提供的标准命名空间,那什么是命名空间呢?想像一下,比如一个年级的学生,在记录的时候出现了重名的情况,那么这个时候应该怎么记录呢,是不是需要加一些其它的名称,比如,一三班小李同学,一一班小李......
  • C++信奥老师解一本通题 1370:最小函数值(minval)
    ​【题目描述】有n个函数,分别为F1,F2,...,Fn。定义Fi(x)=Ai*x*x+Bi*x+Ci(x∈N∗)。给定这些Ai、Bi和Ci,请求出所有函数的所有函数值中最小的mm个(如有重复的要输出多个)。【输入】第一行输入两个正整数n和m。以下nn行每行三个正整数,其中第ii行的三个数分别位Ai、Bi和Ci输入数......
  • C++:多态
    目录一.多态的概念二.多态的定义及其实现1.虚函数2.虚函数的重写/覆盖3.实现多态的条件 4.虚函数重写的例外5.析构函数的重写6.经典例题7.C++11override和final关键字8.重载、重写/覆盖、隐藏的区别三.抽象类四.多态的原理1.虚函数表指针2.多态如何实现3.动态......
  • C++面试考点:拷贝赋值运算符和拷贝构造函数有什么区别?
    定义和功能拷贝构造函数拷贝构造函数是一种特殊的构造函数,用于创建一个新对象,该新对象是作为另一个同类型对象的副本而创建的。其函数原型通常为类名(const类名&other)(在C++11之前,const也可省略)。例如:classMyClass{public:MyClass(constMyClass&ot......