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

网站开发项目经验描述推广公司经营范围

网站开发项目经验描述,推广公司经营范围,网站建设方案 pdf,seo排名优化有哪些文章目录 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>`
    • 总结

C++26 引入了一系列新功能, 进一步提升了语言的灵活性, 性能和易用性. 本文将列举其中的一些新特性, 并通过代码示例帮助您快速掌握.


1. 静态反射 (Static Reflection)

静态反射允许开发者在编译时查询和操作类型信息, 为元编程提供了强大的支持. 这一特性极大地简化了类型处理, 自动生成代码等复杂任务.

示例: 枚举转字符串

#include <experimental/meta>
#include <iostream>
#include <string>
#include <type_traits>template <typename E>requires std::is_enum_v<E>
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)

C++26 引入了在 ifwhile 条件语句中使用结构化绑定的能力, 进一步简化了错误处理流程.

示例: 改进的错误处理

#include <charconv>
#include <cstring>
#include <iostream>void 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 <tuple>template <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_sat<signed char>(100, 30);std::cout << "Saturated Add: " << add_result << "\n";  // 输出: 127// 饱和减法int sub_result = std::sub_sat<signed char>(-100, 30);std::cout << "Saturated Sub: " << sub_result << "\n";  // 输出: -128// 饱和乘法int mul_result = std::mul_sat<signed char>(100, 30);std::cout << "Saturated Mul: " << mul_result << "\n";  // 输出: 127// 类型转换的饱和long large_value = 150;int saturated_cast_result = std::saturate_cast<signed char>(large_value);std::cout << "Saturated Cast: " << saturated_cast_result<< "\n";  // 输出: 127return 0;
}

在 Compiler Explorer 中打开

应用场景

  • 图像处理: 确保像素值在合法范围内(如 0-255).
  • 嵌入式系统: 防止溢出带来的意外行为.

6. 为函数delete标记添加说明

通过为delete标记添加说明, 开发者能更清晰地了解函数为何被删除.

#include <functional>void NewAPI();
void OldAPI() = delete("OldAPI() is outdated and been removed - use NewAPI().");template <class T>
auto cref(const T&) -> std::reference_wrapper<const 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::tuple<int, 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 C++26[[maybe_unused]] int a = foo();  // OKstd::ignore = foo();             // OKstatic_cast<void>(foo());        // Not recommended// from C++26auto _ = foo();auto _ = multi();auto [ret, _, _] = tuple();return ret;
}

在 Compiler Explorer 中打开

8. 用户自定义 static_assert 错误信息

#include <format>template <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::vector<char> v = {#embed "2mb-image.png"
};

这段代码中的 #embed 指令可以让大型文件的数据在编译时直接嵌入为静态存储的一部分, 从而提高加载效率.

10. 新的头文件<debugging>

#include <debugging>
int main() {std::breakpoint_if_debugging();  // stop if in debugger
}

尚无编译器支持.

总结

C++26 的特性为现代 C++ 编程带来了更多的灵活性和高效性, 通过这些改进, C++ 程序员将能够更轻松地编写出高性能的现代化代码.

http://www.hkea.cn/news/430344/

相关文章:

  • 前端自己写代码建网站要花多少钱游戏推广在哪里接活
  • 网站建设中+网页代码nba最新排名东西部
  • 东莞企业建设网站官网有限公司百度推广深圳分公司
  • 海外推广工作内容搜索引擎优化seo是什么
  • wordpress 发短信西安网络优化大的公司
  • dreamweaver个人网站南宁求介绍seo软件
  • 网站常用素材企业培训视频
  • 北京市通州区建设委员会网站网站新站整站排名
  • 太原网站推广只选中联传媒推广排名seo
  • 企业网站建设的常见流程为百度互联网营销顾问
  • 养殖企业网站网络营销策划名词解释
  • 如何进行电子商务网站推广?百度网盘app
  • 做情趣网站需要什么资质sem推广外包
  • 国外网站做任务赚钱的最近新闻有哪些
  • 建设部网站查资质中裕隆百度推广登录平台网址
  • 黄页网站大全免费山东网络推广优化排名
  • 网站文字代码常见的网络营销工具
  • 计算机毕设网站建设怎么改长沙网站设计拓谋网络
  • 类似红盟的网站怎么做aso优化推广
  • vs2013做网站怎样制作免费网页
  • b2c网站的开发无锡网络优化推广公司
  • 网站做视频在线观看营销活动推广方案
  • wordpress多站点统计google图片搜索引擎入口
  • 麻章手机网站建设百度网盘提取码入口
  • 网站后台管理系统的重要技术指标sem竞价托管费用
  • 包头怎样做网站我想做电商怎么加入
  • 株洲企业网站建设品牌2023免费b站推广大全
  • 仿制单页面网站多少钱免费制作网站app
  • 商城网站制作网站长尾词挖掘工具
  • 夹克定制公司trinseo公司