当前位置: 首页 > article >正文

C++面试题

试题一

请问如下函数调用了什么构造函数和析构函数,以及调用的顺序是什么?

如果 fun函数里写成 return s1 + s2 有什么变化?

string fun(strings1, string s2)
{
    string tmp = s1 + s2;
    return tmp;
}
int main()
{
    string s = fun(s1, s2);
    return 0;
}

解答

在这里插入图片描述

如果 fun函数里写成 return s1 + s2,那么就是省略了第3步的拷贝构造以及tmp的析构

注意

第4步,tmp直接拷贝构造s是编译器进行了优化,任意的C++编译器都会做如下优化:

如果用临时对象拷贝构造新对象,那么临时对象就不产生了,直接构造新对象即可。即 string str1 = string(“hello”); 《=》 string str1(“hello”);

参数传引用可以省去拷贝构造函数

返回对象时直接返回结果,不要先定义再返回,可以省去多余对象的构造和析构

试题二:空结构体大小

  • win下vs中C语言中不允许定义空的struct结构体(C)

  • gcc linux/unix系统下 空的struct结构体大小为0 (C)

  • win下vs以及gcc/g++下 C 和C++ 空结构体大小都为1B

  • C中struct 是一个变量

  • C++中struct 是一个对象,需要内存,还需要构造,构造函数需要在一块地址上构造,所以会有一个1B的空间

    构造函数中可打印this指针

例子1

struct Data1{};
struct Data2 :public Data1{};
sizeof(Data2) = 1

例子2

struct Data1
{
	virtual void func(){}
};
struct Data2 :public virtual Data1{};
sizeof(Data2) = 8 // vfptr + vbptr

http://www.kler.cn/a/18007.html

相关文章:

  • 【OceanBase 诊断调优】—— ocp上针对OB租户CPU消耗计算逻辑
  • 虚拟机安装Ubuntu 24.04服务器版(命令行版)
  • (干货)Jenkins使用kubernetes插件连接k8s的认证方式
  • 区块链技术在慈善捐赠中的应用
  • 实现一个BLE HID鼠标
  • 深入探讨 MySQL 配置与优化:从零到生产环境的最佳实践20241112
  • java8新特性——StreamAPI
  • PyQt5零基础入门(二)——主窗口的显示与退出
  • LInux grep sed awk 命令详解
  • 开关电源基础01:电源变换器基础(3)
  • 数影周报:假冒ChatGPT的恶意软件激增,谷歌开启无密码登录
  • docker-mysql的几个问题
  • 学习HCIP的day.04
  • 【383. 赎金信】
  • 从零开始学习Linux运维,成为IT领域翘楚(十)
  • 【刷题】142. 环形链表 II
  • maven配置阿里云镜像仓库
  • 关于C语言的一些笔记
  • 算法:递归启蒙-汉诺塔
  • ChatGPT使用入门
  • 计算机网络基础知识(一)计算机发展史、网络设备、网络结构及拓扑
  • 设计模式:SOLID原则
  • 2022级吉林大学面向对象第三次上机测试
  • 总结841
  • SSM框架学习-bean生命周期理解
  • new BroadcastChannel(),BroadcastChannel API使用介绍