【C++】C++11新特性(二)
目录
完美转发
引用折叠:
lambda表达式
完美转发
引用折叠:
引用折叠是 C++的类型系统规则,用于处理“引用的引用”(如 T& &
)。 在推导过程中,必须折叠成有效的单一引用类型。直接声明引用的引用是非法的,但在模板推导或 typedef
中可能隐式产生。此时,编译器会按规则折叠为单一引用:
& &
、& &&
、&& &
都会折叠成&
(左值引用)&& &&
才是&&
(右值引用)
组合方式 | 折叠结果 |
|
|
|
|
|
|
|
|
using T = int&;
T&& x = ...;
//T是int&,那么T&&其实是int& &&,根据规则折叠成了int&
万能引用:
常量左值引用能够既引用左值又引用右值,这几乎是一个万能的引用。然而,由于其常量性,使用范围受到了一定的限制
万能引用是因为发生了类型推导,如果初始化的源对象如果是左值,则会推导出左值,如果是右值,则会推导出右值,但无论如何都会是一个引用对象, 万能引用能根据传入实参的不同,自动推导成左值引用或右值引用,万能引用只能用于函数模板,类模板不能使用万能引用
template<typename T>
void func(T&& t)
{//....
}
- 如果传进来的是左值,那么
T
会推导为T&
,于是T&&
变成T& &
,折叠成T&
(就是左值引用) - 如果传进来的是右值,那么
T
推导成普通类型,于是T&&
就是T&&
(右值引用)
const 会剥夺万能引用,变为右值引用
template <typename T> // 函数模板
void myfunc(const T&& val) // 右值引用
{cout << val << endl;return;
}
auto&&也是万能引用
auto&&
int a = 10;
func(a); // a 是左值
T
推导为int&
T&&
就变成了int& &&
- 引用折叠:
int& &&
折叠成int&
func(20); // 20是右值
T
推导为int
T&&
就是int&&
- 引用折叠:
int&&
保持int&&
这种形式的参数能够绑定到左值或右值,取决于传入的参数类型。
如果传入的是左值,T 被推导为左值引用类型,如 int&
如果传入的是右值,T 被推导为非引用类型,如 int
万能引用的关键特性就是:自动适应实参是左值还是右值
完美转发
完美转发可以完整的将模板中的左值和右值保留
如果是传入左值直接使用,如果是传入右值那么就相当于move了一下
右值引用后,右值属性变成左值,而完美转发可以将右值原本的属性保留传参,相当于右值引用接管了传入参数的资源
std::forward<T>(arg)
根据T
的推导情况,智能地保持参数的左值/右值性,完美转发
template<typename T>
void PerfectForward(T&& t)
{std::forward<T>(t)
}
std::forward<T>(t)
可以根据 T 是左值引用还是右值引用,分别返回 t 的左值引用或右值引用,从而保证参数的正确性
为什么要有完美转发
因为,如果你直接传 arg
,比如这样:
real_function(arg); // 错!
不管arg
原来是左值还是右值,到了这里它一定是个左值(因为变量有名字,就变成左值了)
所以需要用 std::forward<T>(arg)
,它根据T
的推导,把:
- 左值保持左值
- 右值保持右值
std::forward 和 std::move 的区别:
|
| |
目的 | 强制把对象变成右值 | 条件保持对象本身的左/右值特性 |
使用场景 | 想明确移动资源时用(比如vector优化) | 模板里实现完美转发时用 |
行为 | 无脑右值化 | 根据类型推导智能决策 |
危险性 | 用错可能导致对象被移走、状态不可用 | 用错(忘了forward)可能丢失右值信息,导致性能下降 |
std::move
是"强制右值"std::forward
是"保持原样"
lambda表达式
Lambda表达式是一种在被调用的位置或作为参数传递给函数的位置定义匿名函数对象(闭包)的简便方法
[capture list] (parameter list) -> return type { function body }
[capture list]:捕捉列表,该列表总是出现在lambda表达式开头位置,编译器根据[]来判断接下来是否为lambda函数,捕捉列表能够捕捉上下文中变量供lambda函数使用,捕获列表可以为空,表示不访问任何外部变量,也可以使用默认捕获模式 &
或 =
来表示按引用或按值捕获所有外部变量
(parameters):参数列表,和capture list一致,如果不需要参数传递,则可以连同()一起省略,可以为空,表示没有参数,也可以和普通函数一样指定参数的类型和名称,还可以在 c++14 中使用 auto
关键字来实现泛型参数
->returntype:返回值类型。用追踪返回类型形式声明函数的返回值类型,没有返回值时此部分可省略。返回值类型明确情况下,也可省略,由编译器对返回类型进行推导,还可以在 c++14 中使用 auto
关键字来实现泛型返回值
{function body}:函数体。在该函数体内,除了可以使用其参数外,还可以使用所有捕获到的变量
lambda函数没有函数名,不能直接调用
auto add=[](int a,int b)->int {return a+b};
lambda表达式的返回值类型和参数都可以省略,因此可以写成:
[]{函数体}
lambda本质是个匿名函数,定义的是局部的匿名函数对象,这个对象使用lambda函数的参数体来定义的,也可以看成一个仿函数,可以用来比较大小等操作
lambda编译时,编译器会生成对应的仿函数
lambda []捕捉列表,在lambda表达式中的传入值是原来值的拷贝,并且被const修饰了,不能被修改,如果想要修改,需要在函数体之前加一个mutable,但仍然是传值捕捉,不会修改原变量,只能修改局部变量(一般用不到)
想要改变原变量,只能进行引用传参
class Rate
{
public:Rate(double rate): _rate(rate){}double operator()(double money, int year){return money * _rate * year;}
private:double _rate;
};
int main()
{// 函数对象double rate = 0.49;Rate r1(rate);r1(10000, 2);// lamberauto r2 = [=](double monty, int year)->double{return monty*rate*year;r2(10000, 2);return 0;
};
查看汇编代码发现,每个 lambda 的类型都不相同
实际在底层编译器对于lambda表达式的处理方式,完全就是按照函数对象的方式处理的,即:如
果定义了一个lambda表达式,编译器会自动生成一个类,在该类中重载了operator()
mutable
默认情况下,lambda函数总是一个const
函数,mutable
可以取消其常量性。使用该修饰符时,参数列表不可省略(即使参数为空)。
mutable 可以修改传值捕捉的对象,也可以修改 const 修饰的变量
mutable
主要是为了在const
的限制下提供一定的灵活性,只是 lambda 里面的参数,并不会修改原变量,实质上还是传值捕捉
int a=10;
int b=20;
auto swap1=[a,b]()mutable
{int tmp=a;a=b;b=tmp;
};//可以进行交换
auto swap2=[a,b]()
{int tmp=a;a=b;b=tmp;
};//不能进行交换,报错表达式必须为可修改的左值
与 volatile 的区别
volatile
主要用于告诉编译器,变量的值可能会在程序的外部(如硬件设备、多线程环境等)被改变,所以编译器不能对这个变量进行一些优化。而mutable
是用于在const
成员函数内部修改成员变量
捕获列表
[var]:表示值传递方式捕捉变量var
值传递捕获的方式默认是 const 的,并且还是原来变量的拷贝
auto swap1=[a,b]()mutable
{int tmp=a;a=b;b=tmp;
};
[=]:表示值传递方式捕获所有父作用域中的变量(包括this)
int a=10;
int b=20;
auto f = [=]() mutable
{int tmp = a;a = b;b = tmp;
};
[&var]:表示引用传递捕捉变量var
auto f=[&a,&b]()
{int tmp = a;a = b;b = tmp;
}
[&]:表示引用传递捕捉所有父作用域中的变量(包括this)
int a=10;
int b=20;
auto f=[&]()
{int tmp = a;a = b;b = tmp;
}
混合捕捉:
int a=10;
int b=20;
int c=30;
int d=40;
auto f=[&,c,d]()
{int tmp = a;a = b;b = tmp;
}//对a,b引用捕捉,对c,d传值捕捉
auto f2=[a,b,&c,&d]()
{int tmp = a;a = b;b = tmp;
}//对a,b传值捕捉,对c,d引用捕捉
[this]:表示值传递方式捕捉当前的this指针
新的类功能
默认成员函数有:
构造函数、析构函数、拷贝构造函数、拷贝赋值重载、取地址重载、const取地址重载
C++11 新增了两个:移动构造函数和移动赋值运算符重载
针对的是深拷贝的自定义类型对象,如:string vector list 等
移动构造
如果没有自己实现移动构造,且析构、拷贝构造、拷贝赋值重载都没有实现,那么编译器会自己生成一个默认移动构造,默认生成的移动构造函数,对于内置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动构造,如果实现了就调用移动构造,没有实现就调用拷贝构造
移动赋值构造
如果没有自己实现移动赋值重载函数,且析构函数 、拷贝构造、拷贝赋值重载都没有实现,那么编译器会自动生成一个默认移动赋值。默认生成的移动构造函数,对于内置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动赋值,如果实现了就调用移动赋值,没有实现就调用拷贝赋值。(默认移动赋值跟上面移动构造完全类似)
如果提供了移动构造或者移动赋值,编译器不会自动提供拷贝构造和拷贝赋值
C++11允许在类定义时给成员变量初始缺省值,默认生成构造函数会使用这些缺省值初始化
default
使用default可以强制生成构造
Person(Person&& p)=default;
Person(const Person& p)=default;
Person& operator=(const Person& p)=default;
Person& operator=(Person&& p)=default;
如果只有右值构造,左值也会受影响,因此这几个要一起写
如果用户自己定义了拷贝的,那么既可以接收左值,也可以接收右值,只不过都是拷贝,性能会较差,但是一旦定义了移动的,并且没有声明拷贝构造, 拷贝构造会被隐式标记为 = delete
, 只有右值能进来,其它场合(左值、按值传参、返回值优化以外的情况)都会报缺少可用的构造函数
五法则:
如果你自己定义(或删除)了以下任意一个:
- 拷贝构造
T(const T&)
- 拷贝赋值
T& operator=(const T&)
- 析构函数
~T()
- 移动构造
T(T&&)
- 移动赋值
T& operator=(T&&)
那么通常你就要自己定义(或删除)另外两个,以保证资源管理一致,不会产生内存泄漏或双重释放等错误,只要你自己声明了 拷贝构造 或 拷贝赋值,编译器就不再自动生成移动构造和移动赋值(等同于隐式 = delete
)
这样确保了
- 任何对拷贝行为的自定义(比如深拷贝、引用计数)都不会被一个「幽灵的」移动操作绕过
- 你如果需要“既能拷贝,又能移动”,就必须显式声明移动操作,明确你理解并愿意承担移动时的资源语义
此时如果编译器还给你生成一个隐式的移动构造,它可能会直接“偷走”底层资源(比如把指针置空然后销毁临时对象),绕过了你在拷贝/析构里写的那些清理或计数逻辑,导致双重释放或资源泄漏
delete
函数如果不希望被调用可以在后面加=delete
应用场景:只能在堆上创建的对象
class HeapOnly
{
public:static HeapOnly* CreateObj(){return new HeapOnly;//静态}//C++11:使用delete关键字,将拷贝构造删除HeapOnly(const HeapOnly& obj)=delete;
private://C++98:私有+只声明不实现HeapOnly(const HeapOnly& obj);HeapOnly(){}
};
int main()
{HeapOnly h;//构造函数私有,不能访问HeapOnly* h2=HeapOnly::CreateObj();HeapOnly h3(*h2);//拷贝构造被禁止,无法构造
}
模板参数包
定义
Args是一个模板参数包,args是一个函数形参参数包
在函数定义时,可以使用(...)来表示可变参数
template<typename... Args>void myFunction(Args... args);
typename... Args
是模板参数包,表示可以接受任意数量(包括 0 个)的类型参数。而Args... args
是函数参数包,用于接收与模板参数类型对应的实际参数
Args...
是类型参数包(代表 0 个或多个类型)args...
是函数参数包(代表 0 个或多个实参)
展开函数模板参数包
在 C++11 中,由于没有折叠表达式,因此只能手动递归进行展开
参数包模板的优先级大于特化的模板
递归方式展开函数模板参数包:
// 终止函数,用于处理最后一个参数
template<typename T>
void printArgs(T arg)
{std::cout << arg << " ";
}
// 递归函数,用于展开参数包
template<typename T, typename... Args>
void printArgs(T head, Args... tail)
{std::cout << head << " ";printArgs(tail...);//更具体的匹配优先于更泛化的匹配
}
int main()
{printArgs(1, 2.0, "three");return 0;
}
由于参数不匹配,因此这里直接调用第二个,将第一个参数传给 T,然后剩余的参数递归调用传给模板参数包,然后不断向下递归,根据 C++重载决议规则:更具体的匹配优先于更泛化的匹配,即重载决议总是倾向于非可变参数(普通模板)版本,当到达最后一次调用时,此时会有两个模板匹配成功:void printArgs(T arg)
和void printArgs(T head, Args... tail)
此时重载决议介入,由于第一个更具体,而第二个更泛化,根据重载决议,会选择第二个而不是第一个,因此不会造成无限递归
重载决议和模板特化的对比
阶段 | 主要操作内容 | 备注 |
重载决议(Overload Resolution) | 在多个函数中挑选最匹配的一个(包括模板和非模板函数) | 比如:是调用普通函数、单参数模板、参数包模板? |
模板特化选择(Template Specialization) | 确定对于某个模板类型,选哪个版本(主模板还是特化模板?) | 只在模板内部,和参数推导后才发生 |
- 重载决议是决定“调用哪个函数”。
- 模板特化选择是“模板实例化时,主模板 vs 特化模板谁生效”
template<typename T>
void print(T t)
{cout<<t<<" ";
}
template<typename... Args>
void print(Args... arg)
{print(arg...);//会不断向下传递,当传递为0个参数时,//由于参数包模板的优先级大于特化的模板,因此会继续调用自己,导致无限递归cout<<endl;
}
int main()
{print(1, 2.0, "three");return 0;
}
参数包展开
这段代码中int arr[]={test(args)...}
有多少个参数,就会调用几次函数,就会开辟相应的空间数,最终 arr 数组中的元素就是 参数包传入的参数经过处理后的结果
int doubleValue(int x)
{return x * 2;
}
template <typename... Args>
void foo(Args... args)
{int arr[] = { doubleValue(args)... };
}
这里doubleValue
的返回值类型要么和 arr 的类型相同,要么可以通过隐式类型转换变成 arr 的类型,或者可以通过强制类型转换变成 arr 的类型,否则无法通过编译
相关文章:
【C++】C++11新特性(二)
目录 完美转发 引用折叠: lambda表达式 完美转发 引用折叠: 引用折叠是 C的类型系统规则,用于处理“引用的引用”(如 T& &)。 在推导过程中,必须折叠成有效的单一引用类型。直接声明引用的引用…...
高等数学-第七版-下册 选做记录 习题9-4
1. 3. 4. 8....
特殊权限管理
特殊权限的类型 SUID(Set User ID):当一个可执行文件设置了 SUID 权限后,在执行该文件时,进程会以文件所有者的身份运行,而不是以执行用户的身份。例如,/usr/bin/passwd文件用于修改用户密码&a…...
最新的30个Android Kotlin面试题
以下是2025年最新的30个Android Kotlin面试题及其核心解析,综合了协程、密封类、高阶函数、扩展函数等高频考点,并附有相关引用来源: 一、协程与并发编程 协程与线程的核心区别是什么? 协程是轻量级线程,通过挂起而非阻…...
牛客周赛 Round 91
赛时成绩如下: A. while 题目描述 小歪找到了一个由五个字符构成的字符串,它一次可以选择任意一个字符,将其修改为另一个字符,他想要知道,将这个字符串修改为 "while" 需要的最少操作次数。 解题思路&#x…...
Kafka 的服务端的物理存储架构是什么?零拷贝,mmap,sendfile、DMA gather又是什么?
Kafka 服务端的物理存储架构 Kafka 的物理存储架构设计旨在支持高吞吐、低延迟的数据处理,其核心特点包括: 1. 分区与日志段 主题(Topic)与分区(Partition): Kafka 将每个主题划分为多个分区&…...
1.7 点云数据获取方式——视觉SLAM
图1-7-1 Visual SLAM生成的点...
双向流热固耦合的收敛
1 收敛性 如果想把流固耦合计算过程的收敛性弄清楚,必须理解流固耦合的求解过程和对流场与固体场的定义设置: -这个与其他的真实物理场可能有所不同 -例如你的初始条件可能是不同的当遇到收敛困难时,需要看一下的求解过程用户使用监测点和…...
C++之类和对象:构造函数,析构函数,拷贝构造,赋值运算符重载
前提:如果一个类是空类,C中空类中真的什么都没有吗,不是的,编译器会自动生成6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 默认成员函数:构造函…...
Vue2 相关知识点整理
一、Vue2 核心机制 1. Vue2 的响应式原理是什么? 答案: Vue2 通过 Object.defineProperty 给对象的每个属性添加 getter 和 setter,当数据被访问或修改时,自动触发视图更新。通俗解释: 就像给每个数据绑了一个“监控…...
CSS:编写位置分类及优先级
文章目录 一、行内样式二、内部样式三、外部样式(推荐)四、优先级五、编码风格 一、行内样式 最好不这样写 二、内部样式 可以使用 三、外部样式(推荐) 四、优先级 行内样式 > 内部样式 外部样式 五、编码风格...
Tauri 跨平台开发指南及实战:用前端技术征服桌面应用(合集-万字长文)
厌倦了笨重的Electron应用?想要构建体积小、性能高、安全可靠的跨平台桌面应用?Tauri将是你的不二之选!本教程带你从入门到精通,掌握这个下一代桌面应用开发框架,并通过实战APK分析工具项目,将理论知识转化…...
深入解析 Linux 进程池:原理、实现与高并发优化
引言 当你的服务器需要同时处理 10,000 个客户端请求时,传统的"来一个请求创建一个进程"模式会导致严重的性能瓶颈。此时,进程池(Process Pool) 便成为关键解决方案。它像一支训练有素的特种部队,通过预先创…...
[Python]非零基础的快速上手
从js转的python,没有从初学者阶段开始,主打一个快速上手能写再说. pycharm:一种编辑器 数据类型 基本数据类型:整型(整数)、浮点型、字符型、布尔型 复杂数据类型:列表(数组)、集合区{1,2,3}、元组(1,3.4)字典{n’:2,b:1} 模板字符串 输出模板字符串…...
《算法笔记》10.5小节——图算法专题->最小生成树 问题 E: Jungle Roads
题目描述 The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was spent on extra roads between villages some years ago. But the jungle overtakes roads relentlessly, so the large road network is too expensive to mai…...
数据中心网络架构:高效规划与自动化设计实践
在数据中心网络架构规划设计中,面临如下难点: 设备数量庞大: 服务器、交换机等设备数量多,如何合理规划机柜布局和空间分配,避免资源浪费或密度超标,成为设计难点。 线缆设计复杂: 海量线缆…...
Mysql存储引擎、锁机制
Mysql存储引擎 InnoDB(MySQL 5.5 及以后版本中的默认存储引擎) 事务支持:支持 ACID 事务,适合需要高可靠性的场景(如支付、订单)。 锁机制:默认使用 行级锁…...
UVA1537 Picnic Planning
目录 题目算法标签: 最小生成树, k r u s k a l kruskal kruskal重构树, 树形 d p dp dp思路重构树代码 题目 UVA1537 Picnic Planning 算法标签: 最小生成树, k r u s k a l kruskal kruskal重构树, 树形 d p dp dp 思路 将 1 1 1号点设置为终点, 然后执行重构树计算度数…...
通过AWS Console连接服务器,简化运维过程
简单通过AWS Console连接您的Linux服务器 本文作者: 封磊 Eclicktech SA | AWS Community Builder DevTool | AWS UGL | 亚马逊云科技云博主 阿里云&InfoQ&CSDN签约作者 文章目录 简单通过AWS Console连接您的Linux服务器本文作者: 封磊Eclicktech SA | AWS Community …...
公交实时查询小程序功能点开发
线路查询:用户可输入公交线路号码,小程序实时显示该线路车辆位置与发车信息,能一键切换行驶方向,助用户依实时情况选合适候车站点。站点查询:输入车站信息,小程序呈现经过该站所有公交线路及公交信息&#…...
nginx配置集群服务器中的tcp负载均衡器
文章目录 前言1. Ubuntu下nginx安装2. nginx的tcp负载配置 前言 假设一台机器支持两万的并发量,现在我们需要保证八万的并发量。首先想到的是升级服务器的配置,比如提高 CPU 执行频率,加大内存等提高机器的物理性能来解决此问题。但是单台机…...
Qt/C++开发监控GB28181系统/获取设备信息/设备配置参数/通道信息/设备状态
一、前言 设备注册成功后,接下来要做的就是获取设备的信息,尤其是通道信息,根据国标协议,永远只有两个层级,一个是设备,然后就是设备下面多个通道,设备编码在整个系统中唯一,通道编…...
Linux系统基础:基础指令简介(网络概念部分)
简介:Linux 是一种开源的类 Unix 操作系统内核,由 Linus Torvalds 于 1991 年首次发布。经过多年发展,它已成为服务器、嵌入式设备和个人计算机领域的重要操作系统。 网络基础概念 初始协议 简单来说,协议是一种约定࿰…...
labview项目文件架构
为了使 LabVIEW 项目更具可扩展性和易于维护,合理规划和设计项目文件结构是非常重要的。 以下是一些基于行业经验和最佳实践的建议: 1. ### 文件夹层次划分 将不同的功能模块分开存储在一个清晰的分层目录结构中是一个常见的做法。通常情况下ÿ…...
nuxt项目中引入并配置 iview
安装iview npm install iview --save注:想要加入其它的配置,可以在 nuxt.config.js 的 plugins 配置项中加入,同时在 plugins 文件夹下加入引入逻辑。 在nuxt.config.js文件中写: {src: ~plugins/iview, ssr: true}同时新建 plugi…...
Origin绘图操作:点线图符号显示不全解决方法
一、问题说明 在用origin绘制点线图时,图表刻度线处的点符号显示不完全,如图所示: 二、解决方法 方法一:调整坐标轴刻度,使其能够显示全部数据点。 方法二:有时为了图表美观,则不对坐标轴刻…...
【进程与线程】
文章目录 一、实验目的二、实验内容与设计思想实验内容设计思路 三、实验代码实现四、总结 一、实验目的 1.深刻理解进程和线程的概念,掌握线程与进程在组成成分上的差别; 2.进一步认识并发执行的实质。 二、实验内容与设计思想 实验内容 用pipe()创…...
项目实战-飞机大战【补档】
和项目实战-贪吃蛇大作战【补档】-CSDN博客一样,这也是一个我在大一和网友完成的项目的补档。Dont waste your youth—time flies. 目录 1.工具&环境 2.项目简介 3.需求文档 4.流程图 5.产品原型图 6.可行性分析 7.源代码 8.实战效果 编辑 9.心得…...
算法基础学习|02归并排序——分治
一、思路 (1)确定分界点:mid(lr)/2 ——这里和快排不同 (2)递归排序(left right) (3)归并——合二为一 时间复杂度nlogn 二、题目练习 三、模板 归并排序 …...
测试基础笔记第十六天
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、UI自动化介绍1.认识UI自动化测试2.实施UI自动化测试前置条件3.UI自动化测试执行时机4.UI自动化测试核心作用和劣势 二、认识Web自动化测试工具-Selenium021.Sel…...
Android项目中使用ComposeUI
首先确认项目环境kotlin版本,以下是本机的版本 使用命令 ./gradlew -version 这里kotlin 版本是1.5.31 然后查看build.gradle sdk版本 这里是32 属于低版本 然后需要添加以下配置 buildFeatures {compose true}composeOptions {kotlinCompilerExtensionVersio…...
springboot中有关数据库信息转换的处理
现代项目一般都是前后端分离的,前端只负责展示数据,不负责对数据处理,所以所有数据处理工作都由后端进行 比如在仿京东中的status,审核信息展示,数据库中是以0/1显示,但是前端需要以"审核/未审核&quo…...
HHsuite同源序列搜索数据库构建
HHsuite 可用的数据库格式简介 HHsuite 是用于蛋白质序列比对和同源性检测的工具套件,它使用特定的数据库格式以实现高效的数据存储和快速的检索。HHsuite 常用的数据库格式主要基于 FFINDEX(Flat-File Index),这是一种简单而高效的文件索引系统,它将数据文件(如蛋白质序…...
大模型推理:Qwen3 32B vLLM Docker本地部署
Qwen3基础知识 此次Qwen3开源8个模型(MOE架构:Qwen3-235B-A22B、Qwen3-30B-A3B,Dense架构:Qwen3 0.6B/1.7B/4B/8B/14B/32B),新版本的Qwen3特性包括: 支持混合思维模式,即推理/非推…...
第十六届蓝桥杯 2025 C/C++B组 第二轮省赛 全部题解(未完结)
目录 前言: 试题A:密密摆放 试题B:脉冲强度之和 试题C:25之和 试题D:旗帜 试题H:破解信息 前言: 这是我后续刷到的第二轮省赛的题目,我自己也做了一下,和第一轮省赛…...
域名转移:什么是转移码/EPP码/授权码?
关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…...
Android 系统发展史
Android 1.0:2008年9月 全球第一台安卓设备是 HTC Dream Google地图、YouTube、HTML浏览器、Gmail、即使消息、短信、彩信、日历等 Android Market(应用程序商店) Android 1.1:2009年2月(Petit Four 花色小蛋糕&am…...
Python中的defaultdict方法
文章目录 核心特点基本语法常见使用场景1. 分组数据(默认值为列表)2. 计数(默认值为整数)3. 集合操作(默认值为集合)4. 嵌套字典 注意事项与普通字典对比总结1. 键(Key)的类型2. 值&…...
Android启动应用时屏蔽RecyclerView滑动,延时后再允许滑动,Kotlin
Android启动应用时屏蔽RecyclerView滑动,延时后再允许滑动,Kotlin var bCanScrollVertically falselifecycleScope.launch(Dispatchers.Default) {repeatOnLifecycle(Lifecycle.State.CREATED) {Log.d(TAG, "Lifecycle.State.CREATED")delay(…...
2025运维工程师面试题1(答案在后一张)
一、逻辑思维能力考核: 问题1: 3个人去投宿,一晚30元三个人每人掏了10元凑够30元交给了老板后来老板说今天优惠只要25元就够了,拿出5元命令服务生退还给他们,服务生偷偷藏起了2元,然后,把剩下…...
在网页中使用【LaTeX 数学公式块】的完整步骤总结
以下是在网页中使用 LaTeX 数学公式块的完整步骤总结,记录如何让网页正确渲染 LaTeX 数学表达式(如 \(H(X) -\sum p(x) \log p(x)\) 这样的公式): ✅ 使用 LaTeX 数学公式块的完整步骤(以 KaTeX 为例) &am…...
新人销售如何找精准客户?
深入了解自身产品或服务。 清晰掌握产品优势、应用场景和解决的问题,比如销售办公软件,要熟知其提升办公效率的具体功能,以此定位需求客户。 利用社交媒体平台。 像领英可完善资料,加入行业群组分享内容吸引潜在客户࿱…...
【Unity】使用Socket建立客户端和服务端并进行通信的例子
Socket服务端: using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; public class SocketServer { public static Socket listenSocket;//监听Socket public static List<Socket>…...
为什么要学习《易经》?
《易经》精华解读:变易之道与人生智慧 《易经》(《周易》)是中国最古老的经典之一,被誉为“群经之首,大道之源”。它不仅是占卜之书,更是一部哲学经典,揭示了宇宙运行的规律和人生处世的智慧。…...
13.继承、重载、重写、多态、抽象类、接口、final、Static的学习
一、继承 继承:你继承谁你就是谁,继承是一种严格的父子关系 (在父类里面抽取的属性和方法一定是所有子类所共有) (Student继承Person,那么Student就是人) UML: 类图(描述类和类之间的…...
SpringBoot Actuator未授权访问漏洞的全面解析与解决方案
引言 SpringBoot Actuator 作为应用监控与管理的核心组件,为开发者提供了丰富的系统自省和运维能力。然而,其默认配置中可能存在的未授权访问漏洞,已成为企业安全防护的潜在风险。本文将从漏洞原理、影响范围、检测方法到解决方案,系统性地剖析该问题,并提供覆盖开发、运维…...
使用C# ASP.NET创建一个可以由服务端推送信息至客户端的WEB应用(1)
背景 用户在WEB页面上点击按钮,服务端需要执行一系列操作,该操作系列步骤较多且耗时长,为了更好的给用户浏览体验,需要在每进行一个步骤由服务端推送消息给客户端(浏览器),避免一个长时间的操作…...
一网统管建设组织保障分工常见表
在 “一网统管” 建设进程中,强有力的组织保障体系与各业务部门间的紧密分工协作是确保建设成效的关键。 从组织保障层面来看,需建立专门的 “一网统管” 建设领导小组,由政府高层领导担任组长,各关键业务部门负责人作为组员,以此强化对整体建设工作的统筹规划与组…...
JVM | CMS垃圾收集器详解
目录 CMS垃圾回收器简介 为什么CMS图中初始标记的阶段是单线程?为啥不多线程?当然现在默认多线程了。 CMS的两种模式与一种特殊策略 Backgroud CMS 记忆集 卡表 ForeGroud CMS CMS的标记压缩算法 三色标记 (便于理解而被后人提出&am…...
android开发中的多线程、数据存储同步功能实现方案和应用场景
在Android开发中,多线程、数据存储与同步功能有多种实现方案,以下是详细介绍及其应用场景: 多线程 实现方案: Thread类与Runnable接口:通过继承Thread类并重写run方法,或实现Runnable接口并将其传入Threa…...