标签:return 推导 左值 大人 笔记 vector 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
替代虚函数或模板方法.
后面没啥看头啦.
标签:return,推导,左值,大人,笔记,vector,c++,&&,模板 来源: https://blog.csdn.net/fqbqrr/article/details/114380197
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。