编程语言
首页 > 编程语言> > c++学习喵大人笔记

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