C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自 定义的类型,使用初始化列表时,可添加等号(=),也可不添加。创建对象时也可以使用列表初始化方式调用构造函数初始化。
C++11中废弃auto原来的用法,将 其用于实现自动类型腿断。这样要求必须进行显示初始化,让编译器将定义对象的类型设置为初 始化值的类型。
关键字decltype将变量的类型声明为表达式指定的类型。
由于C++中NULL被定义成字面量0,这样就可能回带来一些问题,因为0既能指针常量,又能表示 整形常量。所以出于清晰和安全的角度考虑,C++11中新增了nullptr,用于表示空指针。
右值也是一个表示数据的表达式,如:字面常量、表达式返回值,函数返回值(这个不能是左值引 用返回)等等,右值可以出现在赋值符号的右边,但是不能出现出现在赋值符号的左边,右值不能 取地址。右值引用就是对右值的引用,给右值取别名。
左值引用只能引用左值,不能引用右值。但是const左值引用既可引用左值,也可引用右值。
右值引用只能右值,不能引用左值。但是右值引用可以move以后的左值。
&&不代表右值引用,而是万能引用,其既能接收左值又能接收右值。
std::forward 完美转发在传参的过程中保留对象原生类型属性。
禁止生成默认函数的关键字delete。
C++11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板。
递归函数方式展开参数包。
逗号表达式展开参数包。
lambda表达式实际是一个匿名函数。
由[capture-list] : 捕捉列表 (parameters):参数列表 mutable(默认为const函数) ->returntype:返回值类型。 {statement}:函数体。
参数列表和返回值类型都是可选部分,而捕捉列表和函数体可以为 空。因此C++11中最简单的lambda函数为:[]{}; 该lambda函数不能做任何事情。
[var]:表示值传递方式捕捉变量
var [=]:表示值传递方式捕获所有父作用域中的变量(包括this)
[&var]:表示引用传递捕捉变量
var [&]:表示引用传递捕捉所有父作用域中的变量(包括this)
[this]:表示值传递方式捕捉当前的this指针
function包装器 也叫作适配器。C++中的function本质是一个类模板,也是一个包装器。
std::bind函数定义在头文件functional中,是一个函数模板,它就像一个函数包装器(适配器),接受一个可 调用对象(callable object),生成一个新的可调用对象来“适应”原对象的参数列表。
我们用它可以把一个原本接收N个参数的函数fn,通过绑定一些参数,返回一个接收M个(M 可以大于N,但这么做没什么意义)参数的新函数。同时,使用std::bind函数还可以实现参数顺 序调整等操作。
今天的文章 2025年c++ 条件变量性能(条件变量c++11)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/5418.html