电信宽带做网站网站怎么做充值提现功能
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:25
当前位置: 首页 > news >正文
- String(String s)
- _str(s._str) {s._str nullptr; } 注 移动构造函数的参数不能设置成const类型的右值引用因为资源无法转移而导致移动语义失效。在C11中编译器会为类默认生成一个移动构造该移动构造为浅拷贝因此当类中涉及到资源管理时用户必须显式定义自己的移动构造。右值被右值引用引用后的属性是左值。因为右值不能直接修改但是右值被右值引用后需要被修改否则无法实现移动构造和移动赋值。 当需要用右值引用引用一个左值时可以通过move函数将左值转化为右值。C11中std::move()函数位于 头文件中该函数名字具有迷惑性它并不搬移任何东西唯一的功能就是将一个左值强制转化为右值引用然后实现移动语义。 4、完美转发 完美转发 在函数模板中完全依照模板的参数的类型将参数传递给函数模板中调用的另外一个函数 函数模板在向其他函数传递自身形参时如果相应实参是左值它就应该被转发为左值如果相 应实参是右值它就应该被转发为右值。 C11通过forward函数来实现完美转发 void Fun(int x) {cout lvalue ref endl; }void Fun(int x) { cout rvalue ref endl; }void Fun(const int x) {cout const lvalue ref endl; }void Fun(const int x) { cout const rvalue ref endl; }templatetypename T void PerfectForward(T t) { Fun(forwardT(t)); } int main() {PerfectForward(10); // rvalue refint a;PerfectForward(a); // lvalue refPerfectForward(move(a)); // rvalue refconst int b 8;PerfectForward(b); // const lvalue refPerfectForward(move(b)); // const rvalue refreturn 0; } 七、可变参数模版 比如list中的emplace_back就是使用了它。 输出大小 //Args是一个模版参数包args是一个函数形参参数包 //声明一个模版参数包Args…args,这个参数包中可以包含0到任意个模版参数 templateclass …Args void show_list(Args… args) {cout sizeof…(args) endl; }int main() {show_list(1, 1, 1);show_list(a,aa);show_list(1.1, a);show_list(1, 1.1, a, xx);return 0; } 输出每个元素 void _show_list() {cout endl; } //编译时推演 //第一个模版参数依次解析获取参数值 templateclass T,class …Args void _show_list(const T val, Args …args) {cout val ;_show_list(args…); }templateclass …Args void show_list(Args… args) {_show_list(args…); }int main() {show_list(1, 1, 1);show_list(a,aa);show_list(1.1, a);show_list(1, 1.1, a, xx);return 0; } 八、 lambda表达式 lambda表达式解决了需要写仿函数重载operator()的问题尤其每次比较的逻辑不一样需要去实现多个类特别是相同类的命名。 语法 lambda表达式书写格式 capture-list mutable - return-type { statement } lambda表达式各部分说明 [capture-list] : 捕捉列表该列表总是出现在lambda函数的开始位置编译器根据[]来判断接下来的代码是否为lambda函数捕捉列表能够捕捉上下文中的变量供lambda函数使用。(parameters)参数列表。与普通函数的参数列表一致如果不需要参数传递则可以连同()一起省略mutable默认情况下lambda函数总是一个const函数mutable可以取消其常量性。使用该修饰符时参数列表不可省略(即使参数为空)。-returntype返回值类型。用追踪返回类型形式声明函数的返回值类型没有返回值时此部分可省略。返回值类型明确情况下也可省略由编译器对返回类型进行推导。{statement}函数体。在该函数体内除了可以使用其参数外还可以使用所有捕获到的变量。 注意 在lambda函数定义中参数列表和返回值类型都是可选部分而捕捉列表和函数体可以为空。因此C11中最简单的lambda函数为[]{}; 该lambda函数不能做任何事情。捕捉列表描述了上下文中哪些数据可以被lambda使用以及使用的方式是传值还是传引用。 [var]表示值传递方式捕捉变量var []表示值传递方式捕获所有父作用域中的变量(包括this) [var]表示引用传递捕捉变量var []表示引用传递捕捉所有父作用域中的变量(包括this) [this]表示值传递方式捕捉当前的this指针父作用域指包含lambda函数的语句块语法上捕捉列表可由多个捕捉项组成并以逗号分割。捕捉列表不允许变量重复传递否则就会导致编译错误。 在块作用域以外的lambda函数捕捉列表必须为空。在块作用域中的lambda函数仅能捕捉父作用域中局部变量捕捉任何非此作用域或者非局部变量都会导致编译报错。lambda表达式之间不能相互赋值即使看起来类型相同 使用 int main() {int a 1;int b 2;cout a b endl;auto f1 {int tmp a;a b;b tmp;};f1(a, b);cout a b endl;return 0; } int main() {int a 1;int b 2;cout a b endl;//通过捕捉列表传引用auto f2 [a, b] {int tmp a;a b;b tmp;};f2();cout a b endl;return 0; } class Test { public:void func(){auto f []{cout _a _b endl;};}private:int _a 2;int _b 4; };int main() {Test t;t.func();return 0; } 九、包装器适配器 1、function function包装器包装的是函数指针类型用起来反人类、仿函数需在全局定义、lambda类型对我们是匿名的中的任意一个。 bool Comp(int a, int b) {return a b; }struct Comps {bool operator()(int a, int b){return a b;} };#includefunctional #includemap int main() {auto complambda -bool{return a b;};map string, functionbool(int, int) m{{函数指针,Comp},{仿函数,Comps()},{lambda,complambda}};int x 1;int y 2;cout m函数指针 endl;cout m仿函数 endl;cout mlambda endl;return 0; } 包装成员函数 静态成员函数static可以不用加“”。 成员函数取地址比较特殊需要加上类域和。 struct AAA { public:static void A(int a){a 0;}void AA(float a){a 1.1;}};int main() {functionvoid(int) f1 AAA::A;f1(1);functionvoid(AAA, float) f2 AAA::AA;AAA a;f2(a, 2.2); //注意不能使用匿名对象因为右值不可以取地址functionvoid(AAA, float) f3 AAA::AA;f3(AAA(), 2.2);return 0; } 2.bind bind是一个函数模板它就像一个函数包装器(适配器)接受一个可调用对象callable object生成一个新的可调用对象来“适应”原对象的参数列表。 struct AAA { public:static void A(int a){cout a endl;}void AA(float a){cout a endl;}};void aaa(int a, int b) {cout a b endl; }int main() {functionvoid(int) f1 AAA::A;f1(1);functionvoid(AAA, float) f2 AAA::AA;AAA a;f2(a, 2.2); //注意不能使用匿名对象因为右值不可以取地址functionvoid(AAA, float) f3 AAA::AA;f3(AAA(), 2.2);//调整传参顺序functionvoid(int, int) ff1 bind(aaa, placeholders::_2, placeholders::_1);ff1(3, 5);//调整参数个数functionvoid(int) ff2 bind(aaa, 22, placeholders::_1);ff2(5);functionvoid(float) ff3 bind(AAA::AA, AAA(), placeholders::_1);ff3(100.1);return 0; } 可以将bind函数看作是一个通用的函数适配器它接受一个可调用对象生成一个新的可调用对 象来“适应”原对象的参数列表。 调用bind的一般形式auto newCallable bind(callable,arg_list); 其中newCallable本身是一个可调用对象arg_list是一个逗号分隔的参数列表对应给定的 callable的参数。当我们调用newCallable时newCallable会调用callable,并传给它arg_list中 的参数。 arg_list中的参数可能包含形如_n的名字其中n是一个整数这些参数是“占位符”表示 newCallable的参数它们占据了传递给newCallable的参数的“位置”。数值n表示生成的可调用对 象中参数的位置_1为newCallable的第一个参数_2为第二个参数以此类推。
- 上一篇: 电信宽带做网站服务器吗网页设计怎么样
- 下一篇: 电信网站备案查询做土特产网站什么名字最好
相关文章
-
电信宽带做网站服务器吗网页设计怎么样
电信宽带做网站服务器吗网页设计怎么样
- 技术栈
- 2026年03月21日
-
电信固定ip如何做网站广州十大装修设计公司
电信固定ip如何做网站广州十大装修设计公司
- 技术栈
- 2026年03月21日
-
电信的网做的网站移动网打不开该找电信还是移动h5制作软件电脑
电信的网做的网站移动网打不开该找电信还是移动h5制作软件电脑
- 技术栈
- 2026年03月21日
-
电信网站备案查询做土特产网站什么名字最好
电信网站备案查询做土特产网站什么名字最好
- 技术栈
- 2026年03月21日
-
电影vip免费网站怎么做的上海市城乡住房建设部网站
电影vip免费网站怎么做的上海市城乡住房建设部网站
- 技术栈
- 2026年03月21日
-
电影点播网站开发费用大学生ppt免费模板网站
电影点播网站开发费用大学生ppt免费模板网站
- 技术栈
- 2026年03月21日






