C++学习笔记——day 1

ops/2024/11/15 6:03:10/

1. 不能用非const修饰的指针指向const修饰的变量

2. c++中的四种cast

(1)static_cast

        兼容类型之间的进行显式转换

        (1)基本数据类型转化(int 转 double)

        (2)类层次结构中上行转换(子类转父类)

        (3)示例

#include <iostream>
#include <cstdio>
#include <cstring>using namespace std;enum Week
{Sun, Mon, Tue, Wes, Thu, Fri, Sat
};int main()
{enum Week w;int n = 10;w = static_cast<Week>(n);cout << w + 1 << endl;return 0;
}

(2)dynamic_cast

(3)const_cast

(4)reinterpret_cast

3. 内联函数

(1)定义

        C++中的内联函数(Inline Function)是一种用于优化程序性能的机制。通过在函数声明或定义前加上关键字inline,编译器可以将该函数的调用直接替换为函数体的代码,以减少函数调用的开销,特别是在短小、频繁调用的函数中,这种机制可以提高执行效率

(2)示例代码

#include <iostream>
#include <cstdio>
#include <cstring>using namespace std;inline void fun(int *p)
{*p += 1;
};int main()
{int i = 0;fun(&i);cout << i << endl;return 0;
}

(3)注意

        多文件编程中,内敛函数所有的函数体内容最好写在头文件中

        (1)main.cpp

#include <iostream>
#include <cstdio>
#include <cstring>
#include "fun.h"using namespace std;int main()
{int i = 0;fun(&i);cout << i << endl;return 0;
}

        (2)fun.h

#ifndef FUN_H
#define FUN_Hinline void fun(int *p)
{*p += 1;
};#endif // FUN_H

4. 引用传参(变量别名,可以通过函数传参直接操作原变量)

(1)定义

        在C++中,引用传参是一种通过传递变量的引用(即别名)来实现函数参数传递的方式。相比值传递,引用传参允许函数直接操作原始数据,而无需对参数进行复制,因此可以提高性能,特别是在传递大型对象时

(2)作用

        在性能要求高的场景,避免复制开销,允许修改实参,提高内存效率

(3)代码示例

#include <iostream>
#include <cstdio>
#include <cstring>
#include "fun.h"using namespace std;void fun1(int &p)
{++p;
}int main()
{int i = 0;int &ref = i;ref += 1;cout << i << endl;fun1(i);cout << i << endl;return 0;
}

(4)引用和指针的区别

        (1)引用不占空间,指针占8个字节

        (2)引用必须初始化,而指针不必

        (3)引用在被绑定以后,这种绑定关系是不能被拆解的,而指针可以指向其他的空间

5.函数的重载

(1)定义

        c++中函数重载是指在同一个作用域内,可以定义多个具有相同函数名但参数列表不同的函数,编译器通过参数的个数、类型或顺序来区分这些函数,从而选择合适的函数进行调用

(2)代码示例

        (1)参数个数不同

void print(int a);
void print(int a, int b);

        (2)参数类型不同

void print(int a);
void print(double a);

        (3)参数顺序不同

void print(int a, double b);
void print(double a, int b);

(3)函数重载规则

        (1)返回值类型不能作为函数重载的依据,即返回值类型不同但参数列表相同的函数不能构成重载

int add(int a, int b);
double add(int a, int b);  // 错误,不能通过返回值类型区分

        (2)默认参数不能用于区分重载函数

void print(int a);
void print(int a, int b = 0);  // 错误,默认参数导致模糊


http://www.ppmy.cn/ops/108814.html

相关文章

Java——踩坑Arrays.asList()

坑1&#xff1a;不能直接使用 Arrsys.asList() 来转换基本类型数据 public static void test1(){// 1、不能直接使用asList来转换基本类型数组int[] arr {1, 2, 3};List list Arrays.asList(arr);System.out.printf("list:%s size:%s class:%s", list, list.size(…

day-52 下一个排列

思路 从后向前遍历数组&#xff0c;把遍历过的元素加入一个有序链表&#xff0c;没变里一个元素判断链表中是否有元素大于当前遍历元素&#xff0c;如果有&#xff0c;把链表中大于当前遍历元素的元素集合中最小的那一个元素赋给当前元素&#xff0c;然后将链表中剩余元素依次赋…

QT:动态库与静态库的生成和使用

目录 一.动态库和静态库 1.动态链接&#xff08;Dynamic Linking&#xff09; 2.静态链接&#xff08;Static Linking&#xff09; 3.选择依据 二.库的创建 1.新建文件和项目中&#xff0c;选择Library中C库 2.新建一个名为libtest库 3.打印一个qDebug&#xff0c;用于…

ASP.NET Core 入门教学十九 依赖注入ioc

ASP.NET Core内置了对依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;的支持&#xff0c;这是一种设计模式&#xff0c;用于实现控制反转&#xff08;Inversion of Control&#xff0c;简称IoC&#xff09;&#xff0c;从而使得应用程序组件之间的耦合…

24.9.9学习笔记

在深度学习中&#xff0c;分布式计算是指使用多台机器或多个处理器来加速训练过程&#xff0c;特别是在处理大规模数据集和复杂的神经网络模型时。深度学习模型往往需要大量的计算资源来训练&#xff0c;这导致了对高效计算方法的需求。以下是深度学习中分布式计算的一些关键概…

移植i2c-tools到ARM平台

下载源码 下载地址&#xff1a;https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/ 解压 修改Makefile 编译 生成的文件

使用Selenium WebDriver捕获网络请求

在进行Web自动化测试时,捕获网络请求是十分重要的。通过这种方式,我们可以了解到页面加载过程中发生的网络活动,这对于调试、性能分析以及确保应用程序按预期工作都非常有用。本文将详细介绍如何使用Selenium WebDriver和Python来实现捕获网络请求的功能。 前置要求 在开始…

漫谈设计模式 [7]:桥接模式

引导性开场 菜鸟&#xff1a;老鸟&#xff0c;我最近在开发一个图形库&#xff0c;要支持多种形状和不同的颜色。每种形状都有多种颜色变种&#xff0c;代码变得越来越复杂。每次添加一种新形状或颜色时&#xff0c;我都得修改很多地方&#xff0c;感觉很麻烦&#xff0c;有没…