做文员的网站知乎/免费发布广告信息网

做文员的网站知乎,免费发布广告信息网,手机免费制作网站,行业网站建设内容作者:求一个demo 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 内容通俗易懂,没有废话,文章最后是面试常问内容(建议通过标题目录学习) 废话不多…

作者:求一个demo

版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

内容通俗易懂,没有废话,文章最后是面试常问内容(建议通过标题目录学习)

废话不多说,我们直接开始------>>>>>>

一、const关键字

        1、特点:

        ①用于定义常量,表示不可修改的值。

        ②可以应用于变量、函数参数、函数返回值、成员函数等。mutable修饰的成员变量可以在const成员函数中被修改。

class MyClass {
private:mutable int value;
public:void modifyValue() const {value = 10; // 正确:可以在 const 成员函数中修改 mutable 成员变量}
};

        ③提高代码安全性和可读性。

        2、示例:

// 1. const变量
const int MAX_SIZE = 100;
// MAX_SIZE = 200; // 错误:不能修改const变量// 2. const指针
int value = 10;
const int* ptr1 = &value; // 指向const int的指针
// *ptr1 = 20; // 错误:不能通过ptr1修改值
ptr1 = nullptr; // 可以修改指针本身int* const ptr2 = &value; // const指针,指向int
*ptr2 = 20; // 可以修改指向的值
// ptr2 = nullptr; // 错误:不能修改指针本身// 3. const成员函数
class MyClass {
public:int getValue() const { // const成员函数,承诺不修改对象状态return value;// value = 10; // 错误:不能在const成员函数中修改成员变量}
private:int value = 0;
};

二、引用

        1、特点:

        ①引用是给变量取个别名,必须初始化,且不能重新绑定。

        ②没有独立的内存空间,与被引用变量共享同一内存。

        ③比指针更安全,不能为null。

        ④常用于函数参数传递和返回值。

        2、示例:

int main() {int x = 10;int& ref = x; // ref是x的引用ref = 20; // 修改ref等同于修改xstd::cout << x; // 输出20int y = 30;// ref = y; // 不是重新绑定,而是把y的值赋给ref(即x)// 引用作为函数参数auto swap = [](int& a, int& b) {int temp = a;a = b;b = temp;};int a = 1, b = 2;swap(a, b); // 直接修改原变量std::cout << a << " " << b; // 输出2 1
}

三、const引用

        1、特点:

        ①不能通过引用修改被引用的对象。

int num = 10;
const int& ref = num;
ref = 20; // 错误,不能通过const引用修改被引用的对象
num = 20; // 正确,直接通过变量名可以修改

        ②可以绑定到临时对象、右值。

const int& ref1 = 5; // 合法,将const引用绑定到字面量5
const int& ref2 = int(10); // 合法,将const引用绑定到临时对象
int num = 10;
int& ref3 = num; // 合法
int& ref4 = 5; // 错误,普通引用不能绑定到右值

        ③常用于函数参数,避免不必要的拷贝同时防止修改。(下面第二条进行了详细解释)

#include <iostream>
#include <string>
using namespace std;void printString(const string& str) {cout << str << endl;
}
int main() {string s = "Hello, World!";printString(s);return 0;
}

        2、注意:普通函数使用引用传递是为了避免对象拷贝,而拷贝构造函数使用引用传递是为了接收要被拷贝的对象,并且在函数体内部完成对象的拷贝操作。

#include <iostream>
using namespace std;class MyClass {
public:int* data;// 构造函数MyClass(int value) {data = new int(value);cout << "Constructor called." << endl;}// 拷贝构造函数MyClass(const MyClass& other) {data = new int(*(other.data));cout << "Copy constructor called." << endl;}// 析构函数~MyClass() {delete data;}
};// 使用const引用作为参数的普通函数
void func(const MyClass& obj) {// 函数内部操作cout << "Value in func: " << *(obj.data) << endl;
}int main() {MyClass obj(10);func(obj);return 0;
}

四、const、引用以及const引用的比较

        ①能否修改:const变量不能修改;引用可以修改,const 引用不能修改。

        ②能否重新绑定:const变量无绑定这一说;引用不能重新绑定;const引用不能重新绑定。

        ③是否需要初始化:const变量必须初始化;引用必须初始化;const引用必须初始化。

        ④能否绑定到临时对象:const变量无绑定这一说;引用不能绑定;const引用能绑定到临时对象。

        ⑤内存占用:const变量有独立内存;引用无独立内存;const引用无独立内存。

        ⑥主要用途:const变量用来定义常量;引用用来取别名、参数传递;const引用安全传递参数。

五、综合应用

        示例:

#include <iostream>
#include <string>
using namespace std;class Student {
public:// const引用参数,避免拷贝同时防止修改Student(const string& name) : name(name) {}// const成员函数,承诺不修改对象状态const string& getName() const { return name; }// 返回const引用,避免拷贝同时防止外部修改const string& getConstRefName() const { return name; }// 返回普通引用,允许外部修改string& getRefName() { return name; }private:string name;
};void printStudent(const Student& s) {cout << "Student: " << s.getName() << "\n";// s.getRefName() = "NewName"; // 错误:s是const引用
}int main() {const string name = "Alice";Student s(name);printStudent(s);// 通过引用修改s.getRefName() = "Bob";printStudent(s);// 尝试通过const引用修改const string& nameRef = s.getConstRefName();// nameRef = "Charlie"; // 错误:不能通过const引用修改// 临时对象printStudent(Student("Temp"));
}

六、constexpr与const区别

        1、constexpr

        (1)介绍:constexpr是C++11新特性,用于定义编译器常量和能在编译期求值的函数。

        (2)特点:

                ①表示值或函数在编译期就能确定。

                ②可用于变量、函数、构造函数等。

                ③C++17引入了if constexpr编译期条件判断。

        (3)用途:

                ①在编译期完成计算,而不是在运行期

constexpr int factorial(int n) {return (n <= 1) ? 1 : n * factorial(n - 1);
}constexpr int fact5 = factorial(5);  // 编译时计算120
// 等价于直接写 constexpr int fact5 = 120;

                ②比#define宏更加安全。

constexpr int MAX_SIZE = 100;  // 替代 #define MAX_SIZE 100
int buffer[MAX_SIZE];          // 可用于数组大小

                ③可以在编译期构造和初始化对象

class Point {
public:constexpr Point(double x, double y) : x(x), y(y) {}constexpr double getX() const { return x; }
private:double x, y;
};constexpr Point origin(0.0, 0.0);  // 编译期构造
constexpr double x = origin.getX(); // 编译期调用成员函数

        (4)示例:

constexpr int size = 10;  // 编译期常量
int arr[size];           // 可用于数组大小// constexpr函数
constexpr int factorial(int n) {return n <= 1 ? 1 : n * factorial(n - 1);
}constexpr int fact5 = factorial(5);  // 编译期计算

        2、constexpr和const区别

        ①求值时机:const运行时常量(也可以是编译期确定);constexpr必须是编译期确定。

        ②初始化要求:const必须初始化;constexpr必须用常量表达式初始化,可以定义数组、结构体。

        ③函数应用:const不能保证编译期求值;constexpr可以在编译期求值。

        ④指针使用:const可以修饰指针本身或指向的内容;constexpr必须指向编译期确定的内存。

        ⑤主要用途:const运行时常量,保证不变性,不能作为模板参数;constexpr编译期计算,可以作为模板参数。

#include <iostream>
using namespace std;int main()
{constexpr int num = 1 + 2 + 3;//constexpr也可换成const,这样下面url[num]也不报错int url[num] = {1,2,3,4,5,6};//如果上面不写constexpr,直接url[num],则会显示num不可用做常量couts<< url[1] << endl;return 0;
}

七、校招面试常问内容

1、const的作用的用法?

        ①定义常量:const int MAX = 100。

        ②保护函数参数不被修改:void func(const int other)。

        ③保护类成员不被修改:const成员函数。

        ④保护指针指向的内容:const char* p或char* const p。

2、const指针与指针const的区别?

const int* p1;    // 指向const int的指针,指针可变,内容不可变
int const* p2;    // 同上,等价写法
int* const p3;    // const指针,指向int,指针不可变,内容可变
const int* const p4;  // 指向const int的const指针,都不可变

3、const成员函数的作用是什么?能修改成员变量吗?

        ①不修改对象状态。

        ②不能修改非mutable成员变量

        ③可以被const对象调用。

4、指针和引用的区别?

        ①指针有自己的一块空间,而引用只是一个别名。
        ②使用sizeof看一个指针的大小,x32环境下4字节,x64环境下8字节;而引用则是引用对象的大小。
        ③指针在使用时可以指向其他对象,而引用只能是一个对象的引用,不能改变;指针有多级指针,而引用没有多级引用。
        ④指针和引用的++含义不同,指针++为整个类型++,引用++只是单纯+1.
        ⑤如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏。(因为返回动态内存分配的对象时,指针可以为null而引用不可以。如果使用动态分配的内存,当返回的引用超出作用域,无法释放内存,造成内存泄漏,而指针可以通过delete释放)
        ⑥作为参数传递的时候,指针需要被解引用才能对对象进行操作,而直接对引用的修改都会改变引用所指向的对象。(*解引用,然后才能访问对象,因为指针指向内存,引用指向对象)

5、为什么函数参数常用const引用?

        ①避免拷贝大对象的开销。

        ②防止意外修改传入的参数。

        ③可以接受临时对象(右值)。

6、函数返回引用时,需要注意什么?

        ①绝不能返回局部变量的引用(局部变量在函数内部定义,函数结束空间后内存空间被释放。如果返回局部变量的引用,在函数外使用该引用,访问的是不存在的内存空间)。

        ②可以返回成员变量、静态变量或传入参数的引用(成员变量是类的一部分,静态变量在整个程序运行期间都存在,传入参数的生命周期在函数调用期间都有效)。

7、const引用的特点?

        ①可以绑定到右值(临时对象)。

        ②可以延长对象的生命周期。

最后,如有不足和错误的地方,期待私信指正!

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

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

相关文章

案例:使用网络命名空间模拟多主机并通过网桥访问外部网络

案例目标 隔离性&#xff1a;在同一台物理机上创建两个独立的网络命名空间&#xff08;模拟两台主机&#xff09;&#xff0c;确保其网络配置完全隔离。内部通信&#xff1a;允许两个命名空间通过虚拟设备直接通信。外部访问&#xff1a;通过宿主机的网桥和 NAT 规则&#xff…

DeepSeek面试——模型架构和主要创新点

本文将介绍DeepSeek的模型架构多头潜在注意力&#xff08;MLA&#xff09;技术&#xff0c;混合专家&#xff08;MoE&#xff09;架构&#xff0c; 无辅助损失负载均衡技术&#xff0c;多Token 预测&#xff08;MTP&#xff09;策略。 一、模型架构 DeepSeek-R1的基本架构沿用…

husky的简介以及如果想要放飞自我的解决方案

husky 是一个 Git Hooks 管理工具&#xff0c;它的主要作用是 在 Git 提交&#xff08;commit&#xff09;、推送&#xff08;push&#xff09;等操作时执行自定义脚本&#xff0c;比如代码检查&#xff08;Lint&#xff09;、单元测试&#xff08;Test&#xff09;、格式化代码…

【动手学深度学习】#4 深度学习计算

主要参考学习资料&#xff1a; 《动手学深度学习》阿斯顿张 等 著 【动手学深度学习 PyTorch版】哔哩哔哩跟李牧学AI 概述 为了实现更复杂的网络&#xff0c;我们需要研究比层更高一级的单元块&#xff0c;在编程中由类表示。通过自定义层和块&#xff0c;我们能更灵活地搭建网…

如何在 Windows 上安装并使用 Postman?

Postman 是一个功能强大的API测试工具&#xff0c;它可以帮助程序员更轻松地测试和调试 API。在本文中&#xff0c;我们将讨论如何在 Windows 上安装和使用 Postman。 Windows 如何安装和使用 Postman 教程&#xff1f;

26考研——图_图的基本概念(6)

408答疑 文章目录 一、图的基本概念图的定义非空性非线性结构 顶点和边的表示顶点边 有向图 & 无向图有向图有向图 G 1 G_1 G1​ 的表示 无向图无向图 G 2 G_2 G2​ 的表示 简单图 & 多重图简单图多重图 顶点的度、入度和出度顶点的度有向图的度 路径、路径长度和回路…

面向对象软件工程实践软件案例

智力运动-数字化思维训练课程介绍 数字化思维训练是科技赋能素质教育创新实践项目&#xff0c;通过数字化信息化手段&#xff0c;深度融合优质原创智力运动教育课程资源&#xff0c;服务幼儿园与小学&#xff0c;提供信息时代校园素质教育教学解决方案。在《面向对象软件工程》…

Linux学习笔记(应用篇一)

基于I.MX6ULL.MINI开发板 标准I/O库链接目录删除文件正则表达式系统标识时间堆内存信号标准信号 进程进程组进程间通信线程互斥锁线程安全 本文章是入门篇的概念&#xff0c;有点零散&#xff0c;后续需要补充复习 **inode&#xff08;索引节点&#xff09;**是 Linux 和 Unix …

医学交互作用分析步骤和目的(R语言)

医学交互作用分析的目的和用途&#xff08;R语言&#xff09; 医学交互作用分析一直是医学数据分析的组成部分&#xff0c;总结最近的一些认识。 目的&#xff1a; 在独立危险因素鉴定的研究中&#xff0c;&#xff08;独立危险因素的&#xff09;交互作用可以作为独立危险因…

Javaweb后端登录会话技术jwt令牌

jwt生成与校验 是base4补位的 最后面是签名&#xff0c;签名不是base64&#xff0c;是通过签名算法加密后来的 令牌长度不是固定的&#xff0c;长度取决于原始内容&#xff0c;载荷&#xff0c;大小 头有&#xff0c;类型&#xff0c;签名算法 base64可以对任意的二进制数据进…

Mybatis操作数据库(注解+xml两个方式)

文章目录 1.个人回顾2.关于mybatis注解的说明3.字段和属性不匹配的解决方案3.1第一个方案3.2第二个方案3.3第三个方案 4.xml路径配置5.xml里面的字段映射 1.个人回顾 刚刚翻看了一下自己的这个之前写的博客&#xff0c;上一次和这个javaee相关的博客还是去年写的&#xff0c;也…

SysVinit和Systemd的系统运行级别

Linux运行级别 SysVinit系统(init守护进程)Linux系统运行级别SysVinit系统(init守护进程)查看Linux运行级别SysVinit系统(init守护进程)修改运行级别&#xff1a; Systemd守护进程Linux系统运行级别systemd查看运行级别Systemd查看系统当前运行级别 systemd修改运行级别multi-u…

vscode终端不识别npm 无法解析npm

vscode 用以管理员打开识别npm vscode 用普通用户打开不识别npm 刚换了一台新电脑&#xff0c;寻思安装各种环境&#xff0c;一顿操作猛如虎&#xff0c;当最后一个打开vscode后&#xff0c;运行项目发现&#xff0c;新建终端>npm run dev 无法识别。 在cmd 中 打node -…

如何理解 Apache Iceberg 与湖仓一体(Lakehouse)?

一、什么是湖仓一体&#xff08;Lakehouse&#xff09;&#xff1f; 湖仓一体是一种融合了数据湖的灵活存储能力与数据仓库的高效分析功能的现代数据架构。它通过整合两者的优势&#xff0c;解决了传统架构的局限性&#xff0c;为企业数据处理提供了更全面的解决方案。 数据湖…

【鸿蒙开发】Hi3861学习笔记- TCP客户端

00. 目录 文章目录 00. 目录01. TCP概述02. TCP应用场景03. TCP和UDP比较04. TCP相关API05. TCP编程流程06. 硬件设计07. 软件设计08. 实验现象09. 附录 01. TCP概述 TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接、可靠的传输层协议&#xff0c;旨…

2025-03-25 学习记录--C/C++-PTA 习题9-3 平面向量加法

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 习题9-3 平面向量加法 本题要求编写程序&#xff0c;计算两个二维平面向量的和向量。 输入格式: ❀ 输入在…

23种设计模式-桥接(Bridge)设计模式

桥接设计模式 &#x1f6a9;什么是桥接设计模式&#xff1f;&#x1f6a9;桥接设计模式的特点&#x1f6a9;桥接设计模式的结构&#x1f6a9;桥接设计模式的优缺点&#x1f6a9;桥接设计模式的Java实现&#x1f6a9;代码总结&#x1f6a9;总结 &#x1f6a9;什么是桥接设计模式…

go:前后端分离

1.前端代码 新建一个前端文件夹&#xff0c;在该文件夹下新建一个.html文件&#xff0c;写入自己的html代码。 前端搞定。 2.后端代码 其核心是挂载路由接受前端传来的数据核心代码如下&#xff1a; func main() { // 服务运行提示 fmt.Println("go web server is runn…

JetsonNano —— 4、Windows下对JetsonNano板卡烧录刷机Ubuntu20.04版本(官方教程)

介绍 NVIDIA Jetson Nano™ 开发者套件是一款面向创客、学习者和开发人员的小型 AI 计算机。按照这个简短的指南&#xff0c;你就可以开始构建实用的 AI 应用程序、酷炫的 AI 机器人等了。 烧录刷机 1、下载 Jetson Nano开发者套件SD卡映像 解压出.img文件并记下它在计算机上的…

文件I/O--C++的文件操作

一、打开文件&#xff0c;从文件中读取、写入文件 从文件中读取数据&#xff1a; #include<fstream> //fstream File stream:文件流 #include<iostream> //fstream包含了 iostream&#xff0c;所以这句可以省略&#xff0c;现在不能了 using namespace std;i…