auto 關鍵字練習題 (Practice - Auto)

Question 1 - auto 強制初始化 [recall]

同事宣告 auto x2; 打算稍後再賦值,另一行寫 int x1;,這兩行分別會發生什麼事?

Question 2 - auto vs std::function [recall]

要把一個 lambda closure 存進變數,用 auto 宣告和用 std::function 宣告有何差異?

Question 3 - type shortcuts 陷阱 [recall]

unsigned sz = v.size();vstd::vector<int>)在 32-bit Windows 正常,為何移植到 64-bit Windows 可能出錯?

Question 4 - range-for 隱形複製 [recall]

for (const std::pair<std::string, int>& p : m) 遍歷 std::unordered_map<std::string, int>,這段程式碼有什麼問題?

Question 5 - 重構便利性 [recall]

某函式回傳型別從 int 改成 long,呼叫端用 auto 接結果與用 int 明確宣告接結果,後續維護有何差異?

Question 6 - vector<bool> 的 operator[] [recall]

為什麼 std::vector<bool>::operator[] 不像其他 std::vector<T> 一樣回傳 T&?它實際回傳什麼?

Question 7 - 隱形 proxy 家族 [recall]

除了 std::vector<bool>::reference,還有哪些「隱形」proxy class 的例子?它們與智慧指標這類 proxy 有何不同?

Question 8 - 慣用法定義 [recall]

什麼是 explicitly typed initializer idiom?它的名稱由來是什麼?

Question 9 - 修正 highPriority [application]

auto highPriority = features(w)[5];features 回傳 std::vector<bool>)之後呼叫 processWidget(w, highPriority) 出現未定義行為,請寫出不放棄 auto 的修正版。

Question 10 - closure 宣告改寫 [application]

C++14 下要寫一個比較函式,能比較任何「像指標」的東西所指向的值(如 std::unique_ptr<Widget>),請用 auto 寫出宣告。

Question 11 - 刻意降精度 [application]

calcEpsilon() 回傳 double,你確定 float 精度已足夠。float ep = calcEpsilon(); 可行但有何不足?如何寫得更好?

Question 12 - UB 流程追蹤 [analysis]

假設 std::vector<bool>::reference 內含「機器字組指標 + 位元偏移」,請逐步分析 auto highPriority = features(w)[5]; 之後使用 highPriority 為何是未定義行為。

Question 13 - expression templates 診斷 [analysis]

數值庫中 Matrix sum = m1 + m2 + m3 + m4; 執行正確,改成 auto sum = m1 + m2 + m3 + m4; 後單元測試離奇失敗。請分析原因,並說明如何從標頭檔預先辨識這類風險。

Connected Pages
auto 關鍵字練習題 (Practice - Auto)
  • Related Concepts
  • Question 1 - auto 強制初始化 [recall]
  • Question 2 - auto vs std::function [recall]
  • Question 3 - type shortcuts 陷阱 [recall]
  • Question 4 - range-for 隱形複製 [recall]
  • Question 5 - 重構便利性 [recall]
  • Question 6 - vector 的 operator[] [recall]
  • Question 7 - 隱形 proxy 家族 [recall]
  • Question 8 - 慣用法定義 [recall]
  • Question 9 - 修正 highPriority [application]
  • Question 10 - closure 宣告改寫 [application]
  • Question 11 - 刻意降精度 [application]
  • Question 12 - UB 流程追蹤 [analysis]
  • Question 13 - expression templates 診斷 [analysis]