当前位置: 首页 > wzjs >正文

网站建设与管理的心得北京百度推广代运营

网站建设与管理的心得,北京百度推广代运营,网站建设方案书 广东,外国网站接单做翻译1.左值和右值 左值定义:左值是一个表达式,它表示一个占有特定内存位置的对象,并且这个对象具有可被程序访问的地址。简单来说,左值是一个可以出现在赋值语句左边的表达式,因为它代表了一个可以被 右值定义:右值是一个…

1.左值和右值

左值定义:左值是一个表达式,它表示一个占有特定内存位置的对象,并且这个对象具有可被程序访问的地址。简单来说,左值是一个可以出现在赋值语句左边的表达式,因为它代表了一个可以被

右值定义:右值是一个表达式,它代表一个临时的值,这个值不具有可被程序访问的地址,通常出现在赋值语句的右边。简单来说,右值是一个只能出现在赋值运算符右边的表达式,它不能作为赋值的目标

右值引用的定义与语法
右值引用的语法形式为T&&,其中T是数据类型。例如,int&&表示对int类型的右值引用,std::string&&表示对std::string类型的右值引用。右值引用只能绑定到右值,不能绑定到左值

左值引用
左值引用是对左值的引用,它为一个已存在的对象提供了一个别名。通过左值引用,可以使用不同的名称来访问同一个对象。左值引用使用 

int& ref = num

1.新特性

std::move:函数用于将一个左值强制转换为右值引用,从而可以触发移动语义。它本质上是一个类型转换,将对象标记为可以被移动的。

#include <iostream>
#include <utility>
#include <vector>int main() {std::vector<int> vec1 = {1, 2, 3};std::vector<int> vec2 = std::move(vec1); // 强制移动std::cout << "vec1 size: " << vec1.size() << std::endl;std::cout << "vec2 size: " << vec2.size() << std::endl;return 0;
}
/*vec1 size: 0
vec2 size: 3*/

2.完美转发

完美转发允许函数模板将其参数以原始的左右值属性传递给其他函数,避免不必要的拷贝和类型转换。它结合了右值引用和 std::forward 函数来实现。

#include <iostream>
#include <utility>void print(int& value) {std::cout << "Lvalue: " << value << std::endl;
}void print(int&& value) {std::cout << "Rvalue: " << value << std::endl;
}template<typename T>
void forwarder(T&& arg) {print(std::forward<T>(arg));
}int main() {int x = 10;forwarder(x); // 传递左值forwarder(20); // 传递右值return 0;
}

在上述代码中,forwarder 是一个函数模板,它接受一个通用引用 T&&std::forward<T>(arg) 会根据 T 的推导结果,将 arg 以原始的左右值属性转发给 print 函数。当传递左值 x 时,调用 print(int&);当传递右值 20 时,调用 print(int&&)

2.lambda公式

内联函数是一种建议编译器在调用点直接展开函数体而不是进行常规函数调用的机制,这样可以减少函数调用的开销,提高程序的执行效率。Lambda 表达式同样具有这种特性,编译器往往会将其代码在调用处直接展开。

在c++ 内存管理系统之智能指针-CSDN博客,我们知道函数调用是存在在栈,所以会浪费时间

 int x=[capture list] (parameter list) -> return type { function body }

capture list  是捕获列表,用于指定 Lambda表达式可以访问的外部变量,以及是按值还是按引用的方式访问。捕获列表可以为空,表示不访问任何外部变量,也可以使用默认捕获模式 & 或 = 来表示按引用或按值捕获所有外部变量,还可以混合使用具体的变量名和默认捕获模式来指定不同的捕获方式。
parameter list 是参数列表,用于表示 Lambda表达式的参数,可以为空,表示没有参数,也可以和普通函数一样指定参数的类型和名称,还可以在 c++14 中使用 auto 关键字来实现泛型参数。
return type 是返回值类型,用于指定 Lambda表达式的返回值类型,可以省略,表示由编译器根据函数体推导,也可以使用 -> 符号显式指定,还可以在 c++14 中使用 auto 关键字来实现泛型返回值。
function body 是函数体,用于表示 Lambda表达式的具体逻辑,可以是一条语句,也可以是多条语句,还可以在 c++14 中使用 constexpr 来实现编译期计算

值捕获

#include <iostream>
using namespace std;int main() {int num = 10;auto lambda = [num]() {num = 20;  // 修改的是捕获的副本cout << "lambda 内部 num: " << num << endl;};lambda();cout << "外部 num: " << num << endl;return 0;
}

引用捕获

引用捕获是指 lambda 表达式捕获外部变量的引用,这样在 lambda 表达式内部对变量的操作实际上就是对外部原始变量的操作,修改会反映到外部作用域中。

#include <iostream>
using namespace std;int main() {int num = 10;auto lambda = [&num]() {num = 20;  // 修改的是外部的原始变量cout << "lambda 内部 num: " << num << endl;};lambda();cout << "外部 num: " << num << endl;return 0;
}

初始化捕获(C++14 引入)

初始化捕获允许在 lambda 表达式中使用初始化器来初始化一个新的捕获变量,并且可以将表达式的结果绑定到这个新变量上。这为 lambda 表达式提供了更灵活的变量捕获方式,可以处理一些复杂的情况,比如捕获临时对象或对变量进行计算后再捕获。

#include <iostream>
#include <string>
using namespace std;int main() {int a = 5;int b = 3;// 初始化捕获,将 a + b 的结果捕获为新变量 sumauto lambda = [sum = a + b]() {cout << "sum: " << sum << endl;};lambda();return 0;
}

显式捕获

显式捕获是指在 lambda 表达式的捕获列表中明确指定要捕获的变量,包括值捕获和引用捕获。与之相对的是隐式捕获(如 [=] 表示值捕获所有外部可见变量,[&] 表示引用捕获所有外部可见变量 )。显式捕获能让代码更加清晰,明确知道 lambda 表达式依赖哪些外部变量。

#include <iostream>
using namespace std;int main() {int x = 10;int y = 20;// 显式值捕获 x,显式引用捕获 yauto lambda = [x, &y]() {x = 30;  // 修改的是 x 的副本y = 40;  // 修改的是外部的 ycout << "lambda 内部 x: " << x << endl;cout << "lambda 内部 y: " << y << endl;};lambda();cout << "外部 x: " << x << endl;cout << "外部 y: " << y << endl;return 0;
}

引用隐式捕获

使用 [&] 来表示引用隐式捕获,它会以引用的方式捕获 lambda 表达式所在作用域中所有可见的变量。这意味着 lambda 表达式内部对这些变量的修改会直接影响到外部的原始变量。

#include <iostream>int main() {int a = 10;int b = 20;// 使用 [&] 进行引用隐式捕获auto lambda = [&]() {a = 100;b = 200;std::cout << "Inside lambda: a = " << a << ", b = " << b << std::endl;};lambda();std::cout << "Outside lambda: a = " << a << ", b = " << b << std::endl;return 0;
}

3.新for循环

for (declaration : range) {// 循环体
}
  • declaration:用于声明一个变量,这个变量会在每次循环迭代时被初始化为 range 中的一个元素。
  • range:表示一个序列,它可以是数组、std::vectorstd::liststd::string 等任何定义了 begin() 和 end() 成员函数或者可以使用 std::begin() 和 std::end() 函数的对象
#include <iostream>
#include <vector>int main() {// 定义一个 std::vectorstd::vector<int> numbers = {1, 2, 3, 4, 5};// 使用范围 for 循环遍历 vectorfor (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;// 也可以用于遍历数组int arr[] = {6, 7, 8, 9, 10};for (int val : arr) {std::cout << val << " ";}std::cout << std::endl;return 0;
}

http://www.dtcms.com/wzjs/299690.html

相关文章:

  • 做集装箱的网站猪八戒网接单平台
  • 疫情最新消息2023武汉seo顾问
  • 丰台网站建设推广seo主要做哪些工作
  • 开锁换锁做网站足球世界排名国家最新
  • 网站建设哈尔滨app开发2google play官网下载
  • 海淀公司网站搭建网络营销策划书论文
  • 做网站技巧最新热点新闻事件
  • 网站关键词和网页关键词的样本论坛发帖
  • ppt素材免费网站长沙百度网站推广
  • 软件商城哪个好淮北seo
  • 网站必须做公安部备案吗深圳搜索引擎优化推广便宜
  • 飞沐网站建设公司北京关键词在线采集
  • 外贸网站推广教程网推项目
  • vs2015做简单网站百度答主中心入口
  • 制作网站的列子肇庆seo
  • 可以做围棋题的网站互联网营销做什么
  • 网站开发工程师 上海推广软文
  • 时时彩做号网站seo资料网
  • b站炮姐收录提交入口
  • 做个人网站的步骤贴吧友情链接在哪
  • 广州网站建设外包域名解析查询工具
  • 承德网站设计公司网站发稿平台
  • 建站工具搭建前台网站深圳电子网络推广查询
  • 给国外b2b网站开发信免费web服务器网站
  • 网站备案流程详细推广发布任务平台app下载
  • 朝阳区手机网站建设服务网络推广的平台有哪些
  • 北辰网站建设公司东莞网站seo优化托管
  • 大兴网站建设公司网图识别在线百度
  • 郑州网站制作推广公司建设网站流程
  • 咸宁住房和城乡规划建设局网站广州各区最新动态