2016-11-25 88 views
1

內置類型(以及來自std的類型)被用作函數和構造函數的參數,而不是每個類型的實例都是有效的輸入。我應該使用強類型來確保編譯時的正確性?

例子:

// There is no guarantee that url is actually a url 
void make_http_request(const std::string& url); 

// Here we know that it must be a url 
void make_http_request(const url& url); 

// There is no way of knowing if this is the correct mutex to lock 
void insert_into_db(std::mutex mutex); 

// Here we know we have the correct mutex 
void insert_into_db(db_mutex mutex); 

這當然不應該被用於對象,你不擁有控制權的屬性。例如,您可以創建一個類connected_socket,但如果對等關閉連接,則該類成爲謬論。然而,它可以用來確保IPv4 UDP套接字永遠不會嘗試到IPv6端點sendto()

你做得越多,你就越能確保你的程序在編譯時有效(誰不喜歡那樣?)。這種做法有什麼問題嗎?它會被認爲是好的嗎?有什麼缺點,他們會值得嗎?

原諒我,如果這是一個概念,通過另一個名稱,我只是無法找到它。

+0

你有你的問題的方式,很難客觀回答。 –

+0

@VaughnCato我很害怕這個。儘管如此,我還是想討論一下這個社區的反饋意見。如果這不是正確的地方,請將我引導到更合適的地方。 –

+0

在你的例子中,你將如何確保'url'實際上包含一個url?否則,我看不到太多的好處... –

回答

3

有一個在C++ Core Guidelines這個guideline

I.4:請準確接口和強類型

原因

類型是最簡單也是最好的文檔,具有明確意思,並保證在編譯時檢查。而且,精確鍵入的代碼通常會更好地優化。

它給出了一些例子。它並沒有真正談論多遠太遠了。

相關問題