当前位置: 首页 > 编程语言 > C#

C#nullcoalescingoperator等同于c++分享

时间:2023-04-10 23:48:04 C#

C#nullcoalescingoperator等同于c++C#nullcoalescingoperator是否有C++等价物?我在我的代码中做了太多空检查。于是想办法减少空代码量。默认情况下,在C++中无法执行此操作,但您可以编写一个:在C#中?运算符定义为??b===(a!=null?a:b)因此,C++方法看起来像Coalesce(a,b)//放入您自己的类型,或者创建一个模板{returna!=null?一个:乙;我刚刚发现这个:??运算符又是NullCoalescing运算符您还可以使用?:运算符使其在C/C++中作为GNU扩展可用:stringpageTitle=getTitle()?:"DefaultTitle";这个怎么样?#defineIFNULL(a,b)((a)==null?(b):(a))使用模板和C++11lambda。第一个参数(左侧)仅被评估一次。第二个参数(右侧)仅在第一个参数为假时才被评估(注意'if'和'?'将提供的表达式静态转换为bool,指针具有等效的'explicitoperatorbool()const'到'!=nullptr')templateTValuecoalesce(TValuemainValue,TSpareEvaluatorevaluateSpare){returnmainValue?mainValue:evaluateSpare();}使用示例void*constnonZeroPtr=reinterpret_cast(0xF);void*constotherNonZero_c=重新解释(0xA);std::cout只是在控制台中打印“0xf”。必须为rhs编写lambda是一个小样板[&](){return;但是如果缺少语言语法的支持,那么这是最好的。只是想扩展@SamuelGarcia的回答以通过泛化模板和添加辅助宏来减少lambda样板文件:初始值=lhs();如果(初始值)返回std::move(初始值);否则返回std::move(rhs());}templateautocoalesce(LHSlhs,RHSrhs,RHSs...rhss)->类型名std::remove_reference::type&&{auto&&initialValue=lhs();如果(初始值)返回std::move(初始值);否则返回std::move(coalesce(rhs,rhss...));}}#defineCOALESCE(x)(::coalesce_impl::coalesce([&](){return(x);}))#defineOR_ELSE);},[&](){return(使用宏,你可以:int*f();int*g();int*h();int*x=COALESCE(f()OR_ELSEg()OR_ELSEh());我希望这有帮助。以上就是C#学习教程:C#空合并运算符等同于C++分享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文来自网络收集,不代表立场,如涉及侵权,请右击联系管理员删除。如需转载请注明出处: