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

云服务器做网站新手教程wordpress导航栏改字体

云服务器做网站新手教程,wordpress导航栏改字体,网站建设前期规划,基本信息型营销网站有哪些compute_encoded_size_and_cache_string_lengths 方法中这段代码是一个C的折叠表达式(fold expression)的应用,用于计算多个参数编码后的总大小。下面我将详细解释这段代码的每个部分,并说明为什么这样写。 代码如下: …

compute_encoded_size_and_cache_string_lengths 方法中这段代码是一个C++的折叠表达式(fold expression)的应用,用于计算多个参数编码后的总大小。下面我将详细解释这段代码的每个部分,并说明为什么这样写。
代码如下:

 size_t total_sum{0};// Avoid using a fold expression with '+ ...' because we require a guaranteed evaluation// order to ensure that each argument is processed in sequence. This is essential for// correctly populating the conditional_arg_size_cache((total_sum += Codec<remove_cvref_t<Args>>::compute_encoded_size(conditional_arg_size_cache, args)), ...);return total_sum;

代码分解

  1. 变量定义:

    size_t total_sum{0};
    
    • 定义一个size_t类型的变量total_sum,初始化为0。这个变量用于累加所有参数的编码后大小。
  2. 折叠表达式:

    ((total_sum += Codec<remove_cvref_t<Args>>::compute_encoded_size(conditional_arg_size_cache, args)), ...);
    
    • 这是一个逗号操作符的折叠表达式(comma-fold expression),展开形式为:
      (total_sum += Codec<remove_cvref_t<Args1>>::compute_encoded_size(conditional_arg_size_cache, args1)),
      (total_sum += Codec<remove_cvref_t<Args2>>::compute_encoded_size(conditional_arg_size_cache, args2)),
      ...,
      (total_sum += Codec<remove_cvref_t<ArgsN>>::compute_encoded_size(conditional_arg_size_cache, argsN));
      
    • 对参数包Args中的每一个类型Args_i,调用Codec<remove_cvref_t<Args_i>>::compute_encoded_size计算其编码大小,并将结果累加到total_sum中。
    • remove_cvref_t<Args_i>用于移除类型的constvolatile和引用修饰符,确保Codec模板实例化时使用的是原始类型。
  3. conditional_arg_size_cache:

    • 这是一个缓存结构(可能是std::vector<size_t>或类似容器),用于存储某些条件参数的编码大小。compute_encoded_size函数可能会根据参数类型和值更新这个缓存。
  4. 返回结果:

    return total_sum;
    
    • 返回累加后的总大小。

为什么这样写?

  1. 避免使用+ ...折叠表达式:

    • 注释中明确提到不使用+ ...折叠表达式(即(Codec<Args>::compute_encoded_size(args) + ...)),因为需要保证求值顺序
    • C++中,+操作符的求值顺序是未指定的(unspecified),编译器可以自由重排操作数的求值顺序。如果compute_encoded_size有副作用(比如更新conditional_arg_size_cache),求值顺序的乱序会导致缓存内容错误。
    • 而逗号操作符(,)的求值顺序是严格从左到右的(C++17起),因此((expr), ...)能保证每个expr按参数包的顺序依次求值。
  2. 依赖conditional_arg_size_cache的副作用:

    • 如果compute_encoded_size会根据当前参数的值更新缓存(例如,某些参数的编码大小依赖于之前参数的值),则必须保证参数的处理顺序与传入顺序一致。
    • 使用逗号折叠表达式是实现这一目标的简洁方式。
  3. 简洁性与性能:

    • 折叠表达式是C++17的特性,能以最简洁的方式展开参数包。
    • 直接累加到total_sum避免了临时变量的分配,性能更高。

等价实现(非折叠表达式)

如果不使用折叠表达式,代码可能需要写成:

size_t total_sum{0};
auto update_sum = [&](const auto& arg) {total_sum += Codec<remove_cvref_t<decltype(arg)>>::compute_encoded_size(conditional_arg_size_cache, arg);
};
(update_sum(args), ...);  // 仍然用逗号操作符保证顺序
return total_sum;

或更冗长的递归模板展开。折叠表达式是更优的选择。

总结

这段代码的核心目的是:

  1. 按顺序计算每个参数的编码大小。
  2. 确保conditional_arg_size_cache的更新顺序与参数顺序一致。
  3. 以最高效的方式累加结果。

通过逗号折叠表达式,既保证了求值顺序,又实现了简洁高效的代码。

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

相关文章:

  • 深圳做网站的公司哪个好如何做招聘网站的对比
  • 宁波快速制作网站建筑工程网站导航
  • 哪个网站做清洁的活多找印度人做网站
  • 金融做推广的网站安装网站提示dir
  • Paas网站建设昆明软件开发公司有哪些
  • 易语言网站做软件如何做好电商网站平面设计
  • 在湖南建设人力资源网站住房与建设注册中心网站
  • 网站开发综合实训报告wordpress小白能学会吗
  • 惠州做网站南通网站制作公司
  • 网站建设招标文件wordpress主题安装目录
  • 制作梦核的网站项目推广app
  • 网站文案案例盐城做网站的哪家公司好
  • 深圳做网站优化口碑营销的案例及分析
  • 做网站推广要会什么在wordpress上添加播放视频
  • 建站优化全包seo加盟代理
  • 网站服务器的选择品牌网站建设j小蝌蚪j
  • 如何免费做网站推广哈尔滨建设网工程竣工公示
  • 外贸免费建设网站制作计算机培训机构排名最新
  • 景区网站建设原则无锡信息网站建设
  • 安庆市建设银行网站wordpress图库
  • 莆田外贸网站建设如何自学美工
  • 免费信息推广网站什么值得买wordpress模板
  • 响应式外贸网站价格建设网站的意义知乎
  • 网站在线qq代码网页设计师培训哪个好
  • 网站产品图怎么做网站推广应该怎么做
  • 网站做适配手机要多久有什么网站可以做简历
  • 做外贸的网站有何用处HTML5怎么做自适应网站
  • python 网站开发 环境上海加强旅游住宿业与商业场所
  • 图派做网站1688官网网页版
  • 深色网站哪里有做胎儿dna亲子鉴定