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

公司怎么注册自己的网站修改wordpress图标

公司怎么注册自己的网站,修改wordpress图标,安居客网官网入口,怎样删除网站折叠表达式(Fold Expressions)是 C17 引入的一种模板元编程技术,用于简化可变参数模板(variadic templates)的参数包展开。它允许以简洁的方式对参数包(parameter pack)中的所有元素进行递归式操…

折叠表达式(Fold Expressions)是 C++17 引入的一种模板元编程技术,用于简化可变参数模板(variadic templates)的参数包展开。它允许以简洁的方式对参数包(parameter pack)中的所有元素进行递归式操作,如求和、逻辑运算、函数调用等。


1. 基本语法

折叠表达式的基本形式如下:

折叠方式语法示例展开形式(假设参数包为 args... = a, b, c
一元右折叠(pack op ...)(a op (b op c))
一元左折叠(... op pack)((a op b) op c)
二元右折叠(pack op ... op init)(a op (b op (c op init)))
二元左折叠(init op ... op pack)(((init op a) op b) op c)

其中:

  • pack 是参数包(如 args...)。
  • op 是操作符(如 +, &&, , 等)。
  • init 是初始值(仅用于二元折叠)。

2. 常见用途

(1) 求和(+ 折叠)

template<typename... Args>
auto sum(Args... args) {return (args + ...); // 一元右折叠:a + b + c
}

展开形式

return (a + (b + c));

(2) 逻辑运算(&&|| 折叠)

template<typename... Args>
bool all_true(Args... args) {return (args && ...); // 检查所有参数是否为 true
}

展开形式

return (a && (b && c));

(3) 逗号操作符折叠(, 折叠)

template<typename... Args>
void print_all(Args... args) {(std::cout << ... << args); // 一元左折叠:(((cout << a) << b) << c)
}

展开形式

((std::cout << a) << b) << c;

3. 为什么使用逗号操作符(,)折叠?

在最初的代码中:

((total_sum += Codec<remove_cvref_t<Args>>::compute_encoded_size(conditional_arg_size_cache, args)), ...);

使用的是逗号操作符折叠,而不是 + 折叠,原因如下:

(1) 保证求值顺序

  • + 折叠的求值顺序是未指定的(unspecified),编译器可以自由优化计算顺序:

    (args + ...); // 可能是 (a + b) + c,也可能是 a + (b + c)
    

    如果 compute_encoded_size 有副作用(如修改 conditional_arg_size_cache),顺序不一致会导致错误。

  • , 折叠的求值顺序是严格从左到右(C++17 起):

    (f(args), ...); // 保证 f(a), f(b), f(c) 按顺序执行
    

    因此,使用 , 折叠可以确保 compute_encoded_size 按参数顺序依次执行。

(2) 避免 + 折叠的潜在问题

如果写成:

total_sum += (Codec<Args>::compute_encoded_size(args) + ...);
  • + 折叠可能先计算所有 compute_encoded_size 再累加,导致 conditional_arg_size_cache 更新顺序错误。
  • , 折叠确保每次计算后立即累加,保证缓存正确更新。

4. 其他折叠表达式示例

(1) 二元左折叠(带初始值)

template<typename... Args>
auto sum_with_init(int init, Args... args) {return (init + ... + args); // 二元左折叠:(((init + a) + b) + c)
}

(2) 调用多个函数

template<typename... Funcs>
void run_all(Funcs... funcs) {(funcs(), ...); // 依次调用 func1(), func2(), func3()
}

(3) 检查是否所有参数满足条件

template<typename... Args>
bool all_even(Args... args) {return ((args % 2 == 0) && ...); // 检查是否全是偶数
}

5. 总结

特性说明
用途简化可变参数模板的参数包展开
求值顺序+* 等数学运算顺序未指定,, 严格从左到右
适用操作符+, -, *, /, &&, `
初始值支持二元折叠((init op ... op pack)(pack op ... op init)
主要优势代码简洁,避免递归模板展开

在最初的代码中,使用 , 折叠是为了确保 compute_encoded_size 按顺序执行,从而正确更新 conditional_arg_size_cache。这是折叠表达式在依赖求值顺序的场景下的典型应用。

http://www.dtcms.com/a/616376.html

相关文章:

  • 网站建设推广唯心磁遁8wordpress 伪静态html
  • 网站建设验收标准百度seo排名
  • php网站开发职位html查看器
  • 外贸电商网站制作白云网站 建设seo信科
  • 网站建设方案说明快速仿站网站建设
  • 学院网站改造方案中国建设银行官网站公积金预约
  • 广西壮族自治区建设厅网站wordpress 早期
  • 深圳最专业的高端网站建设深圳百度代理
  • 网站为什么被降权郑州网络公司排名
  • 网站开发技术可以做什么工作铜川泰士公馆建设网站
  • 网站域名费一年交多少学会网站建设的重要性
  • 汕头网站推广制作怎么做重庆快速排名优化
  • 专门做网站的软件开源seo软件
  • 电子商务网站建设体会公司常用网站开发软件
  • 网站建站企业百度网盘私人资源链接
  • aspnet网站开发实例论文红色企业网站模板
  • html做音乐网站模板做阿里巴巴网站费用吗
  • 厦门怎么没有 网站备案丰台网站关键词优化
  • 建设网站需要招聘哪些人毕设 做网站
  • 企业网站设计公司辽宁住房城乡建设部官方网站
  • php网站开发 vip一流的高端企业网站
  • 做网站设计怎么进企业多语言企业网站建设费用
  • 成都网站建设公司汇总品牌建设文案
  • 宜兴网站策划wordpress腾讯云储存
  • 手机端模板网站二次元博客源码wordpress
  • 安全可信网站wordpress 编辑器标签
  • jquery网站后台哈尔滨制作网站
  • linux网站建设论文设计好的建设网站
  • 哪些网站是中文域名杭州seo网站推广软件
  • 厦门市建设管理协会网站微商怎样让客源主动加你