c++面试一

news2024/10/2 12:28:21

1.#include使用

 在C/C++中,#include 预处理指令用于包含头文件,这些头文件通常包含了函数声明、宏定义以及其他的声明和定义。#include 指令后面跟着的文件名可以使用双引号 "" 或尖括号 <> 来指定,它们之间有一些区别。

  1. 双引号 ""
    • 当文件名被双引号 "" 括起来时,预处理器会首先在当前源文件所在目录下查找要包含的文件。
    • 如果在当前目录下找不到指定的文件,预处理器会继续在系统默认的头文件目录中查找(通常是编译器的包含目录)。
  2. 尖括号 <>
    • 当文件名被尖括号 <> 括起来时,预处理器会直接在系统默认的头文件目录中查找要包含的文件。
    • 它通常用于包含系统提供的标准库头文件或者其他全局可用的头文件。

2. 常量指针和指针常量的区别

        2.1 const的优点

        在C/C++中,宏定义使用 #define 来定义一个符号常量或者带参数的代码替换。宏定义在预处理阶段被简单地进行文本替换,它不会进行任何类型检查。这意味着在宏定义中,不会进行任何类型检查,而且宏定义的参数也不会进行类型检查。

2.2 常量指针和指针常量的区别

const修饰的变量不能作为左值,初始化完不能被修改。
const的编译方式不同,在c中const就是当作变量来编译生成指令的,c++中,所有出现const常量名字的地方,都被常量的初始化替换。

在c语言中,const修饰的量可以不用初始化(但是没啥意义) ,但也不是常量,叫做常变量 

在c++中,,const修饰的量必须初始化,叫做常量

C++/C中const的区别 - 不同初始化方式对C++中const量性质的影响_c const没有初始化-CSDN博客

3.  c++11的新特性

3.1 初始化列表
  • 初始化列表允许使用 {} 语法来初始化数组、容器和类对象。
  • 它提供了一种更简洁、一致的初始化方式,并且可以防止窄化转换。

3.2 auto关键字

3.3 decltype关键字

3.4 范围for循环

3.5 nullptr关键字

void fun(int x) {
    cout << x << endl;
}

void fun(int* p) {
    if (p != nullptr)
        cout << *p << endl;
}

int main() {
    fun(0);  // 在 C++98 中编译可能失败,存在二义性,但在 C++11 中编译为 fun(int)
    int* p = nullptr;  // 使用 nullptr 初始化空指针
    return 0;
}
3.6 lambda表达式

Lambda表达式是一种匿名函数,它允许我们在需要函数作为参数的地方以内联的方式定义函数。

3.7 智能指针

3.8 右值引用

        右值引用是C++11引入的特性,用于标识对临时对象(右值)的引用。它们通过 && 符号来声明,与左值引用 & 相对应。

        右值引用的主要目的是提高C++中的移动语义(Move Semantics),允许在不进行资源拷贝的情况下将临时对象的内容转移给另一个对象,从而提高性能和效率。

        右值引用通常与移动构造函数和移动赋值运算符一起使用,这些特殊的成员函数允许在对象之间转移资源而不是复制资源。这对于管理动态分配的内存和其他资源非常有用,因为它减少了不必要的内存分配和释放。

3.9 移动语义 以及 移动构造函数和移动赋值运算符

        移动语义是C++11引入的特性,它允许在不进行资源复制的情况下将资源从一个对象转移到另一个对象。这样做可以避免不必要的内存分配和释放,提高程序的性能和效率。移动语义通常与右值引用一起使用,用于转移临时对象的资源。

        移动构造函数和移动赋值运算符是类的特殊成员函数,它们用于实现移动语义。移动构造函数允许将资源从一个对象移动到另一个对象,而不是进行深度复制。移动赋值运算符执行类似的操作,允许在赋值操作中转移资源。这两个特殊成员函数通常使用右值引用参数来实现。

#include <iostream>
#include <vector>

class MyVector {
public:
    int size;
    int* data;

    // 构造函数
    MyVector(int s) : size(s), data(new int[s]) {
        std::cout << "Constructing MyVector of size " << size << std::endl;
    }

    // 移动构造函数
    MyVector(MyVector&& other) noexcept : size(other.size), data(other.data) {
        other.size = 0;
        other.data = nullptr;
        std::cout << "Moving resources from one MyVector to another" << std::endl;
    }

    // 析构函数
    ~MyVector() {
        delete[] data;
        std::cout << "Destroying MyVector" << std::endl;
    }
};

int main() {
    // 创建一个临时的MyVector对象
    MyVector temp(5);
    
    // 创建一个新的MyVector对象,并使用移动构造函数将资源从temp移动到vec
    MyVector vec(std::move(temp));

    // 这时temp的资源已经被移动到vec,temp不再拥有资源,其析构函数会被调用
    std::cout << "Size of temp: " << temp.size << std::endl; // 应该输出0

    // vec现在拥有temp之前的资源
    std::cout << "Size of vec: " << vec.size << std::endl; // 应该输出5

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1471991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes Prometheus 系列|Prometheus介绍和使用|Prometheus+Grafana集成

目录 第1章Prometheus 入门1.1 Prometheus 的特点1.1.1 易于管理1.1.2 监控服务的内部运行状态1.1.3 强大的数据模型1.1.4 强大的查询语言 PromQL1.1.5 高效1.1.6 可扩展1.1.7 易于集成1.1.8 可视化1.1.9 开放性 1.2 Prometheus 的架构1.2.1 Prometheus 生态圈组件1.2.2 架构理…

深度学习目标检测】二十、基于深度学习的雾天行人车辆检测系统-含数据集、GUI和源码(python,yolov8)

雾天车辆行人检测在多种场景中扮演着至关重要的角色。以下是其作用的几个主要方面&#xff1a; 安全性提升&#xff1a;雾天能见度低&#xff0c;视线受阻&#xff0c;这使得驾驶者和行人在道路上的感知能力大大降低。通过车辆行人检测技术&#xff0c;可以在雾天条件下及时发现…

c++ Qt 网络连接

1、基础概念 1.1 TCP/UDP TCP 是一种面向连接的传输层协议&#xff0c;它能提供高可靠性通信(即数据无误、数据无丢失、 数据无失序、数据无重复到达的通信) 适用情况&#xff1a; 1.SN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议 2、适合于对传输质量要求较…

[C++]使用C++部署yolov9的tensorrt模型进行目标检测

部署YOLOv9的TensorRT模型进行目标检测是一个涉及多个步骤的过程&#xff0c;主要包括准备环境、模型转换、编写代码和模型推理。 首先&#xff0c;确保你的开发环境已安装了NVIDIA的TensorRT。TensorRT是一个用于高效推理的SDK&#xff0c;它能对TensorFlow、PyTorch等框架训…

kubectl 命令行管理K8S

目录 陈述式资源管理方法 1.基本信息查看 查看版本信息 查看资源对象简写 查看集群信息 配置kubectl自动补全 node节点查看日志 查看 master 节点状态 查看命名空间 查看default命名空间的所有资源 创建命名空间yy 删除命名空间yy 在命名空间kube-public 创建副本…

户用光伏设计和工商业光伏设计有什么区别?

随着全球对可再生能源需求的不断增长&#xff0c;光伏技术作为一种高效、清洁的能源解决方案&#xff0c;正受到越来越多的关注。在光伏系统的设计和安装过程中&#xff0c;户用光伏和工商业光伏之间存在显著的差异。本文将探讨这两种类型的光伏设计之间的主要区别。 一、目标与…

List去重有几种方式

目录 1、for循环添加去重 2、for 双循环去重 3、for 双循环重复坐标去重 4、Set去重 5、stream流去重 1、for循环添加去重 List<String> oldList new ArrayList<>();oldList.add("张三");oldList.add("张三");oldList.add("李四&q…

Linux提权—服务漏洞,以MySQL-UDF提权为例

UDF(user defined function&#xff0c;用户自定义函数) 利用条件&#xff1a; 有对MySQL数据库进行创建&#xff0c;插入&#xff0c;删除的权限 secure_file_priv为空 利用过程 secure_file_priv的值为空或者是我们恰巧需要用到的目录&#xff0c;如下&#xff1a; 提权成…

MATLAB环境下一种改进的瞬时频率(IF)估计方法

相对于频率成分单一、周期性强的平稳信号来说&#xff0c;具有非平稳、非周期、非可积特性的非平稳信号更普遍地存在于自然界中。调频信号作为非平稳信号的一种&#xff0c;由于其频率时变、距离分辨率高、截获率低等特性&#xff0c;被广泛应用于雷达、地震勘测等领域。调频信…

C# OpenVINO PaddleSeg实时人像抠图PP-MattingV2

目录 效果 项目 代码 下载 C# OpenVINO 百度PaddleSeg实时人像抠图PP-MattingV2 效果 项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using System; using System.Diagnostics; using System.Drawing; using System.Security.Cryptography; using System.Text; us…

mysql 2-21

约束的分类 添加约束 查看表约束 非空约束 唯一性约束 复合的唯一性约束 只要有一个字段不重复&#xff0c;就可以添加成功 主键约束 自增列 mysql 8.0具有持久化&#xff0c;重启服务器会继续自增 外键约束 创建外键 关联必须有唯一性约束&#xff0c;或者是主键 约束等级 …

HashMap的put()方法执行流程

HashMap的数据结构在jdk1.8之前是数组链表&#xff0c;为了解决数据量过大、链表过长是查询效率会降低的问题变成了数组链表红黑树的结构&#xff0c;利用的是红黑树自平衡的特点。 链表的平均查找时间复杂度是O(n)&#xff0c;红黑树是O(log(n))。 HashMap中的put方法执行过…

MySQL认证方法介绍

阅读本文之前请参阅----MySQL 数据库安装教程详解&#xff08;linux系统和windows系统&#xff09; MySQL数据库的认证方法对于确保数据安全和维护系统完整性至关重要。在MySQL中&#xff0c;有多种认证方法可供选择&#xff0c;每种方法都有其特定的用途和配置方式。本文将详细…

Odoo系统安装部署并结合内网穿透实现固定域名访问本地ERP系统

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

九州金榜|家庭教育小技巧分享

说到家庭教育&#xff0c;每个做父母的都会有一套自己的理论&#xff0c;家庭教育也是每个家长必须学会的知识&#xff0c;下面九州金榜金榜家庭教育就为大家带来一些教育教育小技巧&#xff0c;助大家在家庭教育中得到一些启示&#xff1a; 一、树立榜样 为孩子树立好榜样&a…

【C语言基础】:操作符详解(二)

文章目录 操作符详解一、上期扩展二、单目操作符三、逗号表达式四、下标访问[]、 函数调用()五、结构成员访问操作符六、操作符的属性&#xff1a;优先级、结合性1. 优先级2. 结合性 操作符详解 上期回顾&#xff1a;【C语言基础】&#xff1a;操作符详解(一) 一、上期扩展 …

测试C#使用ViewFaceCore实现图片中的人脸遮挡

基于ViewFaceCore和DlibDotNet都能实现人脸识别&#xff0c;准备做个遮挡图片中人脸的程序&#xff0c;由于暂时不清楚DlibDotNet返回的人脸尺寸与像素的转换关系&#xff0c;最终决定使用ViewFaceCore实现图片中的人脸遮挡。   新建Winform项目&#xff0c;在Nuget包管理器中…

Windows常用协议

LLMNR 1. LLMNR 简介 链路本地多播名称解析(LLMNR)是一个基于域名系统(DNS)数据包格式的协议,可用于解析局域网中本地链路上的主机名称。它可以很好地支持IPv4和IPv6&#xff0c;是仅次于DNS 解析的名称解析协议。 2.LLMNR 解析过程 当本地hosts 和 DNS解析 当本地hosts 和 …

安装python的docker库

文章目录 一、在线安装二、制作离线安装包2.1 报错处理 一、在线安装 先确定是否有pip命令。 yum install python-pip直接安装。 pip install docker查看docker库。 pip list二、制作离线安装包 在有互联网的环境下直接安装。 #docker为下载下来的包名。 pip download do…

CCF-A类ASE‘ 24 6月7日截稿!共同探讨软件工程领域的未来!

会议之眼 快讯 第39届ASE (International Conference on Automated Software Engineering)即自动化软件工程国际会议将于 2024 年 10月27-11月1日在美国加利福尼亚州萨克拉门托举行&#xff01; ASE会议作为自动化软件工程领域的首要研究会议&#xff0c;承载着全球自动化软件工…