怎么建设一个自己微信网站修改wordpress首页header

张小明 2026/1/1 14:23:13
怎么建设一个自己微信网站,修改wordpress首页header,谈谈对网站开发的理解,千锋前端培训多少钱一、noexcept 是为了解决什么问题#xff1f; 在 C11 之前#xff0c;异常说明使用的是动态异常规范#xff1a; void f() throw(int, std::bad_alloc); void g() throw(); // 表示不抛异常问题极其严重#xff1a; 运行期检查#xff0c;零优化空间违反即调用 unexp…一、noexcept是为了解决什么问题在 C11 之前异常说明使用的是动态异常规范voidf()throw(int,std::bad_alloc);voidg()throw();// 表示不抛异常问题极其严重运行期检查零优化空间违反即调用unexpected()再terminate()ABI 不稳定编译器难以优化STL 无法据此做容器级别决策几乎没人敢用C11 的设计目标noexcept的核心动机是让“是否会抛异常”成为一个可在编译期推导、可用于优化、可影响接口选择的属性换句话说异常是否发生从「运行期契约」升级为「类型系统的一部分」二、noexcept的本质语义非常重要voidf()noexcept;并不是说“这个函数不会抛异常”而是说如果这个函数抛异常程序将立刻调用std::terminate()即try{f();}catch(...){std::terminate();// 无条件}noexcept是承诺不是能力检测。三、noexcept的两种形式1.无条件noexceptvoidf()noexcept;等价于voidf()noexcept(true);2.条件noexceptC11 核心设计templatetypenameTvoidfoo(Tx)noexcept(noexcept(T(std::forwardT(x))));异常规格成为编译期表达式示例完美转发构造templatetypenameTTmake()noexcept(noexcept(T())){returnT();}四、noexcept是类型系统的一部分voidf()noexcept;voidg();usingFvoid(*)();usingNFvoid(*)()noexcept;F pfg;// OKNF pnff;// OK但NF pnfg;// 编译错误noexcept是函数类型签名的一部分。五、为什么noexcept对性能至关重要1.影响代码生成EH tables有异常 → 生成异常展开表noexcept→完全移除异常元数据在 hot loop / 数值计算 / SLAM 后端中尤为关键。2.STL 的核心决策依据std::vector扩容行为if(T isnoexcept-move-constructible)使用 moveelse使用 copy等价于std::is_nothrow_move_constructible_vT示例为什么没写noexcept会导致性能灾难structBad{Bad(Bad){}// 没有 noexcept};structGood{Good(Good)noexcept{}};std::vectorBadv1;// 扩容时 copystd::vectorGoodv2;// 扩容时 move这就是 STL 要求 move ctornoexcept的原因六、noexcept与移动语义的关系核心Rule of Five noexceptstructX{X(X)noexceptdefault;Xoperator(X)noexceptdefault;};原因vector,deque,map等容器std::optional,std::variantstd::unique_ptr全部依赖noexcept来选择移动路径七、noexcept与析构函数极其重要C11 起~T()noexcept(true);// 默认即析构函数隐式noexcept如果析构函数抛异常~T(){throwstd::runtime_error(boom);}std::terminate()原因防止 stack unwinding 二次异常正确模式~T()noexcept{try{cleanup();}catch(...){log_error();}}八、noexcept与模板元编程常见 traitstd::is_nothrow_move_constructibleTstd::is_nothrow_copy_constructibleTstd::is_nothrow_destructibleT典型应用SLAM / 点云库中很常见templatetypenameTvoidsafe_swap(Ta,Tb)noexcept(std::is_nothrow_move_constructible_vTstd::is_nothrow_move_assignable_vT){T tmpstd::move(a);astd::move(b);bstd::move(tmp);}九、noexceptvsconst属性是否属于类型const是noexcept是throw()否已废弃十、常见误区非常重要点误区 1noexcept 不会抛异常事实noexcept的语义是“一旦抛异常立即std::terminate()”错误理解示例#includeiostream#includestdexceptvoidf()noexcept{std::coutbefore throw\n;throwstd::runtime_error(boom);std::coutafter throw\n;}intmain(){f();}运行结果before throw terminate called after throwing an instance of std::runtime_errorcatch根本来不及栈不会正常展开析构函数不会全部执行对比非noexceptvoidg(){throwstd::runtime_error(boom);}intmain(){try{g();}catch(conststd::exceptione){std::coutcaught: e.what()\n;}}输出caught: boom正常异常语义工程结论noexcept是“强终止契约”不是“不会抛”的保证误区 2随便给函数加noexcept这是生产事故级错误错误示例包装函数voidmay_throw(){throwstd::runtime_error(error);}voidwrapper()noexcept{may_throw();//}intmain(){wrapper();}运行结果terminate called after throwing an instance of std::runtime_error更隐蔽的版本真实工程坑voidlog(conststd::strings){if(s.empty()){throwstd::logic_error(empty);}}voidfoo()noexcept{log();// 间接抛异常}根本看不到 throw却直接 terminate正确写法 1内部吞异常voidfoo()noexcept{try{log();}catch(...){// fallback / logging}}正确写法 2条件noexcepttemplatetypenameFvoidcall(Ff)noexcept(noexcept(f())){f();}工程结论只有当“整个调用链都不抛异常”时才可以写noexcept误区 3忘记给 move ctor 加noexcept这是 STL 性能退化最常见的来源错误示例#includevectorstructBad{Bad()default;Bad(constBad)default;Bad(Bad){}// 没有 noexcept};intmain(){std::vectorBadv;v.reserve(1);v.emplace_back();v.emplace_back();// 触发扩容}STL 的真实逻辑if(is_nothrow_move_constructibleT)moveelsecopy结果扩容时调用 copy ctor大对象 →灾难性性能对 Eigen / 点云 / 位姿对象尤其致命正确示例structGood{Good()default;Good(constGood)default;Good(Good)noexcept{}//};对比验证可加日志structVerbose{Verbose()default;Verbose(constVerbose){std::coutcopy\n;}Verbose(Verbose)noexcept{std::coutmove\n;}};std::vectorVerbosev;v.emplace_back();v.emplace_back();输出move如果去掉noexcept输出是copy工程级总结一个没写noexcept的 move ctor等价于“禁用移动语义”三个误区一句话总结误区本质错误noexcept 不会抛实际是“抛了就死”随便加noexcept违反调用链异常安全move ctor 没noexceptSTL 主动退化到 copy十一、工程级使用准则必须noexcept场景移动构造 / 移动赋值析构函数swapRAII cleanup数值内核、实时系统谨慎使用场景构造函数分配内存IO用户回调不要使用场景无法保证内部调用链不抛异常十二、一个完整工程示例structPose{Eigen::Matrix4d T;Pose()default;Pose(Poseother)noexcept:T(std::move(other.T)){}Poseoperator(Poseother)noexcept{Tstd::move(other.T);return*this;}~Pose()noexceptdefault;};这类类型在SLAM 后端、图优化、点云容器中是黄金标准十三、总结一句话noexcept不是语法糖而是现代 C 性能、异常安全和库设计的核心支点
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

锡林郭勒盟建设工程造价信息管理网站做app开发公司

首先看一下学网络安全有什么好处: 1、可以学习计算机方面的知识 在正式学习网络安全之前是一定要学习计算机基础知识的。只要把网络安全认真的学透了,那么计算机基础知识是没有任何问题的,操作系统、网络架构、网站容器、数据库、前端后端等等…

张小明 2025/12/30 5:17:21 网站建设

网站建设实训室介绍承德做网站

在日常开发中,我们经常听到"加个索引就能变快",但索引到底是如何工作的呢? 一、例子:图书馆找书 你要在一本500页的技术书中找到所有提到"MySQL"的页面: 没有索引的情况(全表扫描): 从第一页开始,逐页阅读 每页都要仔细检查是否包含"MySQ…

张小明 2025/12/30 5:17:17 网站建设

给公司做一个网站查网课答案的网站怎么做

想要为GTA V创作独特的游戏资产却苦于复杂的文件格式转换?Sollumz插件为你提供了在Blender中一站式完成GTA V资产制作的便捷解决方案。这款开源工具深度整合了GTA V的专有文件格式,让普通玩家也能轻松制作专业的游戏内容。 【免费下载链接】Sollumz Blen…

张小明 2025/12/30 5:17:14 网站建设

企业网站的建立标准免费域名注册网

题目描述设 A 和 B 是两个字符串。我们要用最少的字符操作次数,将字符串 A 转换为字符串 B。这里所说的字符操作共有三种:删除一个字符;插入一个字符;将一个字符改为另一个字符。A,B 均只包含小写字母。输入格式第一行为字符串 A&…

张小明 2025/12/30 5:17:10 网站建设