c++学习喵大人笔记
动
与推导
用 F=空(*)(整)
,这样定义函数类型
,上次搞错了.
用来编译时
推导变量/表达式
类型.动
的限制:1,必须初化.2,不能为函数参数(可为λ函数参数类似模板了).3,不能定义数组.4,不能作非静态成员变量.
cv
为常/易
.不声明为指针/引用
时,动
忽略引用与常易
.反之,则保留
.推导
始终保留引用与常易
.更精确.
推导(函数)
,则为其返回
值.如推导(左值)
,则返回左值引用
.
左值与右值
左值:可放=左边/可取&
.
右值:只放=右边/不可取&
.
纯右值:临时变量/原始字面/非引用返回临时变量/λ
.
将亡值:将被移动的值/T&&返回值/移动()返回
(都是废物
),也叫废物利用
.
auto c = move(a); // c是将亡值
auto d = static_cast<A&&>(a); // d是将亡值
int a = 4;
int &&b = a; // error, a是左值
int &&c = move(a); // ok
//左值转右值.
移动
相当于转移
所有权.通过移动构造函数A(A&&)
来.
vector<int> return_vector(void){
vector<int> tmp {1,2,3,4,5};
return tmp;
}
vector<int> rval_ref = return_vector();
//触发返回值优化(RVO)
类模板默认模板参数必须从右往左定义
,而函数模板
无此限制.
什么聚合类型初化
都是折腾.λ
中[*本]
,表示捕捉对象
,用于多线程.
[[carries_dependency(跳过栅栏)]],[[noreturn(无中)]] ,[[deprecated("可选过时信息")]],[[fallthrough(直降)]],[[nodiscard(不丢)]],[[maybe_unused(可能未用)]]
应用+元组
.
std::string_view stv(str.c_str(), str.size());
//串视避免复制.
as_const
将左值
转常左值
.
用访问者
模式来扩展类层次
结构.
用模板
替代继承和虚函数;
C++20中的concepts
来替代面向对象代码;
用variants
替代虚函数或模板方法.
后面没啥看头啦.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现