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;