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

艺术网站欣赏织梦模板大气网站建设类网站模板下载

艺术网站欣赏,织梦模板大气网站建设类网站模板下载,电商平台站内推广有哪些,广州响应式网站建设文章目录 1. 静态反射 (Static Reflection)示例: 枚举转字符串应用场景 2. 合约 (Contracts)示例: 定义函数合约应用场景 3. 条件中的结构化绑定 (Structured Bindings in Conditions)示例: 改进的错误处理应用场景 4. 包索引 (Pack Indexing)示例: 获取参数包的第一个和最后一… 文章目录 1. 静态反射 (Static Reflection)示例: 枚举转字符串应用场景 2. 合约 (Contracts)示例: 定义函数合约应用场景 3. 条件中的结构化绑定 (Structured Bindings in Conditions)示例: 改进的错误处理应用场景 4. 包索引 (Pack Indexing)示例: 获取参数包的第一个和最后一个元素应用场景 5. 饱和算术 (Saturation Arithmetic)示例: 安全算术操作应用场景 6. 为函数delete标记添加说明应用场景 7. 匿名占位符的改进8. 用户自定义 static_assert 错误信息9. 为花括号初始化的内容提供静态存储支持10. 新的头文件debugging总结 C26 引入了一系列新功能, 进一步提升了语言的灵活性, 性能和易用性. 本文将列举其中的一些新特性, 并通过代码示例帮助您快速掌握. 1. 静态反射 (Static Reflection) 静态反射允许开发者在编译时查询和操作类型信息, 为元编程提供了强大的支持. 这一特性极大地简化了类型处理, 自动生成代码等复杂任务. 示例: 枚举转字符串 #include experimental/meta #include iostream #include string #include type_traitstemplate typename Erequires std::is_enum_vE constexpr std::string enum_to_string(E value) {std::string result unnamed;[:expand(std::meta::enumerators_of(^E)):] []auto e {if (value [:e:]) {result std::meta::identifier_of(e);}};return result; }enum Color { red, green, blue }; static_assert(enum_to_string(Color::red) red); static_assert(enum_to_string(Color(42)) unnamed);int main() {Color red Color::red;std::cout enum_to_string(red) std::endl;return 0; }应用场景 类型描述自动生成: 通过反射轻松提取类型信息.代码生成工具: 基于反射实现自动代码生成和序列化.复杂元编程: 减少模板代码的复杂性. 2. 合约 (Contracts) 合约为函数定义前置条件, 后置条件和断言, 提升代码的可靠性. 示例: 定义函数合约 #include contracts // 合约支持的头文件int divide(int numerator, int denominator)pre (denominator ! 0) // 前置条件: 分母不能为 0post (result: result * denominator numerator) // 后置条件: 结果 * 分母 分子 {contract_assert(numerator 0); // 断言: 分子必须是非负数return numerator / denominator; }应用场景 输入验证: 确保函数调用的参数满足预期.逻辑验证: 自动检测计算结果是否符合约定.调试工具: 通过断言捕捉潜在的逻辑错误. 注意: 此功能目前仍需特定编译器支持. 3. 条件中的结构化绑定 (Structured Bindings in Conditions) C26 引入了在 if 或 while 条件语句中使用结构化绑定的能力, 进一步简化了错误处理流程. 示例: 改进的错误处理 #include charconv #include cstring #include iostreamvoid parse_int(char* str) {if (auto [ptr, ec] std::to_chars(str, str std::strlen(str), 42);ec std::errc{}) {std::cout Parsed successfully.\n;} else {std::cerr Failed to parse: str \n;} }int main() {const char* buffer 42;parse_int(buffer); // 输出: Parsed successfully.return 0; }在 Compiler Explorer 中查看示例 应用场景 简化异常处理: 在条件语句中直接解构返回值.提高可读性: 通过解构直接获取多个结果. 4. 包索引 (Pack Indexing) 包索引让开发者能直接访问模板参数包中的特定元素, 简化模板编程. 示例: 获取参数包的第一个和最后一个元素 #include iostream #include tupletemplate typename... Args constexpr auto first_and_last(Args... args) {return std::make_pair(Args...[0], Args...[sizeof...(Args) - 1]); }int main() {auto [first, last] first_and_last(1, 2, 3, 4, 5);std::cout First: first , Last: last \n;return 0; }注意: 当前示例基于提案实现, 需等待特定编译器支持. 应用场景 元组操作: 直接访问和操作元组中的特定元素.参数解包: 在模板编程中高效地解包和处理参数包.代码生成: 简化生成代码时对参数包的处理.编译时计算: 在编译时对参数包进行索引和计算, 提高编译期的灵活性.容器操作: 在自定义容器中高效地访问和操作元素. 5. 饱和算术 (Saturation Arithmetic) 饱和算术为加减乘除提供安全操作, 避免溢出. 示例: 安全算术操作 #include iostream #include numeric // 包含饱和算术的定义int main() {// 饱和加法int add_result std::add_satsigned char(100, 30);std::cout Saturated Add: add_result \n; // 输出: 127// 饱和减法int sub_result std::sub_satsigned char(-100, 30);std::cout Saturated Sub: sub_result \n; // 输出: -128// 饱和乘法int mul_result std::mul_satsigned char(100, 30);std::cout Saturated Mul: mul_result \n; // 输出: 127// 类型转换的饱和long large_value 150;int saturated_cast_result std::saturate_castsigned char(large_value);std::cout Saturated Cast: saturated_cast_result \n; // 输出: 127return 0; }在 Compiler Explorer 中打开 应用场景 图像处理: 确保像素值在合法范围内(如 0-255).嵌入式系统: 防止溢出带来的意外行为. 6. 为函数delete标记添加说明 通过为delete标记添加说明, 开发者能更清晰地了解函数为何被删除. #include functionalvoid NewAPI(); void OldAPI() delete(OldAPI() is outdated and been removed - use NewAPI().);template class T auto cref(const T) - std::reference_wrapperconst T;template class T auto cref(const T) delete(cref(rvalue) is dangerous!);int main() {int i 0;auto r1 std::cref(i); // OKauto r2 std::cref(42); // Error, best match is deletedreturn 0; }在 Compiler Explorer 中打开 参考这篇博客:What delete means 应用场景 API 更新: 清晰地标记过时的函数, 引导用户使用新的 API.安全性: 阻止危险的函数调用, 提高代码的安全性. 7. 匿名占位符的改进 #include tuple[[nodiscard]] int foo() { return 0; }[[nodiscard]] std::tupleint, int, double tuple() { return {0, 1, 1.0}; }int multi() {auto _ 1; // OKauto _ 2.0; // OK, no conflictauto _ string; // OK, no conflictauto [ret, _, _] tuple(); // OK, no conflict// return _; // Error, _ has multi definitionreturn ret; }int main() {// before C26[[maybe_unused]] int a foo(); // OKstd::ignore foo(); // OKstatic_castvoid(foo()); // Not recommended// from C26auto _ foo();auto _ multi();auto [ret, _, _] tuple();return ret; }在 Compiler Explorer 中打开 8. 用户自定义 static_assert 错误信息 #include formattemplate typename T void test_fun(T a) {static_assert(sizeof(T) 1,std::format(Unexpected sizeof: expect 1, got {}, sizeof(T))); }int main() {test_fun(c); // OK// test_fun(1); // error }在 Compiler Explorer 中打开 9. 为花括号初始化的内容提供静态存储支持 std::vectorchar v {#embed 2mb-image.png };这段代码中的 #embed 指令可以让大型文件的数据在编译时直接嵌入为静态存储的一部分, 从而提高加载效率. 10. 新的头文件debugging #include debugging int main() {std::breakpoint_if_debugging(); // stop if in debugger }尚无编译器支持. 总结 C26 的特性为现代 C 编程带来了更多的灵活性和高效性, 通过这些改进, C 程序员将能够更轻松地编写出高性能的现代化代码.
http://www.w-s-a.com/news/757313/

相关文章:

  • 可以看的网站的浏览器有哪些专业APP客户端做网站
  • 如何做网站推广自己的产品推荐个网站好吗
  • 网站经营范围wordpress注入点
  • 学校网站开发协议夫妻网络网站建设
  • 福州网站seo推广优化微信商家小程序怎么弄
  • 免费网站推广工具在游戏网站做中介合法
  • 网站建设前的规划网站建设公司六安
  • 公司注册网站开发的行业表述南宁在百度上建网站
  • 创建企业网站国内网站用django做的
  • 云主机网站的空间在哪制作微网站的平台
  • 长沙做网站 青创互联wordpress4.4.1
  • 宜昌哪里有专业做网站的网站开发做什么的
  • 3小说网站开发东莞网站公司哪家好
  • 做网站安全联盟解ps网站设计概述
  • 聊城公司做网站wordpress连接域名
  • 宣传网站建设的意义台州行app官网下载
  • 温州 网站优化网站开发公司前置审批
  • 网站开发具体的工作内容网站下载app免费
  • seo网站建设时文章频率昆山网站建设ikelv
  • 中天建设中瑞物资网站优化建立生育支持政策体系
  • 网站页面的宽度大网站怎样选域名
  • icp网站备案流程wordpress post 405
  • 网站怎样上传到空间重庆有多少网站
  • 用模板建商城购物网站嘉定专业网站建设
  • 网站开发与应用 论文dede手机医院网站模板
  • 织梦 网站栏目管理 很慢自学网页设计难吗
  • 茶文化建设网站的意义平顶山网站建设服务公司
  • 建设网站详细流程南京宣传片制作公司
  • 合肥网站排名什么网站做电气自动化兼职
  • 如何用api做网站交通建设门户网站