iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 8
0
Software Development

山姆大叔談 C++:從歷史談起,再給個定義—Modern C++ 解惑系列 第 8

DAY 7:Modern C++ 要角,老語言回春的關鍵,談 auto/decltype,卷一

當岔題成了習慣,不岔就是例外。本篇的「岔題」是:螢幕水平空間的重要性。古人的螢幕,水平可用的字元數約 80 個,據說跟 IBM 有關係。有了那樣的歷史因素,80 便成了「魔術數字」。有一些人的程式碼用 80 字元做為「邊界」,超出即換(斷行)。有一個 Visual Studio 外掛可以在指定的位置加上垂直線,我的習慣是 96 個字元。

C++11 推出前,使用 STL 組件的痛苦指數居高不下。例如下列使用 std::vector 的程式碼:

std::vector<std::string> user_name = {"sam", "tsai", "richard"};
std::vector<std::string>::const_iterator it =
        std::find(user_name.begin(), user_name.end(), "sam");

if (it != user_name.end()) {
    // Do something...
}

有了 auto 上述程式可改寫成:

std::vector<std::string> user_name = {"sam", "tsai", "richard"};
auto it = std::find(user_name.begin(), user_name.end(), "sam");

if (it != user_name.end()) {
    // Do something...
}

是不是簡潔許多?而且,真實場景還有比這個更誇張的的程式碼,使用 auto 不僅節省打字的時間,也讓整體的程式碼呈現更精實。

另一個引入 auto 對程式碼「版面」安排的改變反應在函數宣告上:

bool ContainsShitOwner(const std::vector<std::string>& names);
std::vector<std::string> GetTeaShopOwner();

使用 auto 來宣告函數,變成:

auto ContainsShitOwner(const std::vector<std::string>& names) -> bool
auto GetTeaShopOwner() -> std::vector<std::string>;

發現函數宣告式左邊固定為 auto,整體的閱讀效果應有顯助提昇。


上一篇
DAY 6:Smart Pointer std::shared_ptr<T>,卷二
下一篇
DAY 8:Modern C++ 要角,老語言回春的關鍵,談 auto/decltype,卷二
系列文
山姆大叔談 C++:從歷史談起,再給個定義—Modern C++ 解惑26

尚未有邦友留言

立即登入留言