導論與術語練習題 (Practice - Introduction)

Question 1 - 版本用語 [recall]

書中若寫「C++11 支援 lambda expressions」,這句話涵蓋哪些語言版本?「C++98」一詞又涵蓋哪些?

Question 2 - lvalue 判別法 [recall]

面試官問:「有沒有快速方法判斷一個 expression 是 lvalue 還是 rvalue?這方法絕對可靠嗎?」

Question 3 - rvalue reference parameter [recall]

Widget(Widget&& rhs); 中,rhs 的型別是 rvalue reference,那 rhs 本身是 lvalue 還是 rvalue?

Question 4 - copy 的用語 [recall]

一個物件經由 move constructor 從另一物件建構出來,C++ 術語上這個新物件叫什麼?

Question 5 - exception safety 保證 [recall]

請分別說明 basic exception safety guarantee 與 strong exception safety guarantee 對呼叫者的承諾。

Question 6 - signature 定義 [recall]

依本書定義,bool func(const Widget& w) noexcept; 的 signature 是什麼?noexcept 與參數名 w 算不算在內?

Question 7 - deprecated 特性 [recall]

什麼是 deprecated 特性?請舉出書中的經典例子與其替代品,並說明編譯器是否一定會警告。

Question 8 - undefined behavior [recall]

請舉出書中三個 undefined behavior 的典型例子,並給出 data race 的精確定義。

Question 9 - argument 與 parameter [application]

程式碼 Widget wid; someFuncmove(wid)); 呼叫 void someFunc(Widget w;——請指出 argument 與 parameter 各是什麼,並說明 w 經由何種方式建構。

Question 10 - 省略號判讀 [application]

你在書中看到 template<typename... Ts> void processVals(const Ts&... params) { … }——其中 ... 兩種省略號各代表什麼?

Question 11 - declaration vs definition 分類 [application]

請將下列四行分類為 declaration 或 definition:extern int x;class Widget;bool func(const Widget& w) { return w.size() < 10; }enum class Color { Yellow, Red, Blue };

Question 12 - copy 成本推理 [analysis]

同事說:「這個物件是另一個物件的 copy,所以建構它的成本就是一次 copy construction。」請分析這句話錯在哪裡,以及要判斷成本還需要哪些資訊。

Question 13 - parameter 恆為 lvalue 的深層意涵 [analysis]

「所有 parameter 都是 lvalue」這條規則看似枯燥,卻是 move semantics 與 perfect forwarding 的基石。請分析:若函式的 parameter 型別是 Widget&&,把它直接傳給下一個函式會發生什麼?這解釋了哪些工具的存在必要性?