From efb254dc3c6f6922fc814df1f04f5c76beb806f9 Mon Sep 17 00:00:00 2001 From: xixishuibubao77 <1105452236@qq.com> Date: Wed, 4 Jun 2025 12:12:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=201.=E6=8F=90=E5=89=8D=E7=BB=93=E6=9D=9F?= =?UTF-8?q?=E8=AF=AD=E5=8F=A5=E7=9A=84demo=E5=A4=9A=E5=87=BA=E5=8F=A3?= =?UTF-8?q?=E8=BF=9D=E8=83=8C=E4=BA=86=E5=8D=95=E4=B8=80=E5=87=BA=E5=8F=A3?= =?UTF-8?q?=E5=8E=9F=E5=88=99=202.lambda=E4=BD=BF=E7=94=A8&=E6=8D=95?= =?UTF-8?q?=E8=8E=B7=EF=BC=8C=E5=B9=B6=E6=9C=AA=E7=9B=B4=E6=8E=A5=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=A4=96=E9=83=A8=E5=8F=98=E9=87=8F=EF=BC=8C=E5=9C=A8?= =?UTF-8?q?()=E6=B7=BB=E5=8A=A0=E5=BD=A2=E5=8F=82=E6=89=8D=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/cpp_tricks.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/cpp_tricks.md b/docs/cpp_tricks.md index 0b45b7b..23b2268 100644 --- a/docs/cpp_tricks.md +++ b/docs/cpp_tricks.md @@ -397,8 +397,11 @@ void babysitter(Baby *baby) { ``` 这个函数有很多层嵌套,很不美观。用**提前返回**的写法来优化: +鉴于多return违反了单一出口原则,我们尽可能采用do while(0) +break的方式来打断分支。 +注:但这种方法对于涉及到内层有多重循环的时候并不好用。 ```cpp +/*return版*/ void babysitter(Baby *baby) { if (!baby->is_alive()) { puts("宝宝已经去世了"); @@ -413,6 +416,23 @@ void babysitter(Baby *baby) { puts("正在调教宝宝..."); puts("正在安抚宝宝..."); } +/*do while版*/ +void babysitter(Baby *baby) { +do{ + if (!baby->is_alive()) { + puts("宝宝已经去世了"); + break; + } + puts("正在检查宝宝喂食情况..."); + if (baby->is_feeded()) { + puts("宝宝已经喂食过了"); + break; + } + puts("正在喂食宝宝..."); + puts("正在调教宝宝..."); + puts("正在安抚宝宝..."); + }while(0); +} ``` ## 立即调用的 Lambda @@ -608,7 +628,7 @@ void calc_average() { void calc_average() { int res = 0; int count = 0; - auto cihou = [&] { // 局部 Lambda 的好处:自动帮你捕获 res 和 count! + auto cihou = [&](auto const& arr ) { // 局部 Lambda 的好处:自动帮你捕获 res 和 count! for (int i = 0; i < arr.size(); i++) { res += arr[i].age; count += arr[i].count;