更多的定製和實踐問題,但它被認爲是糟糕的形式,或高度不可取(選擇你的解釋不好)混合使用Qt庫類型和類似的標準C++類型在一個程序中?Qt - 混合Qt和std :: C++類型
例如,堅持只使用QStrings用於字符串使用還是人們經常在源文件中混合使用QString和std :: string類型?
我已經繼承了一些代碼,包括在一個文件中使用QString和std :: string,並且想知道是否將所有內容都轉換爲一個或另一個。
更多的定製和實踐問題,但它被認爲是糟糕的形式,或高度不可取(選擇你的解釋不好)混合使用Qt庫類型和類似的標準C++類型在一個程序中?Qt - 混合Qt和std :: C++類型
例如,堅持只使用QStrings用於字符串使用還是人們經常在源文件中混合使用QString和std :: string類型?
我已經繼承了一些代碼,包括在一個文件中使用QString和std :: string,並且想知道是否將所有內容都轉換爲一個或另一個。
我認爲這真的歸結爲「這取決於你在做什麼」。當然,更容易保持只有一種類型。然而,有時您需要傳遞std :: strings或傳遞QStrings,並且不進行轉換可能會更好地提高性能。
另請注意,QStrings與std:strings不同。因此,在它們之間進行轉換時(或選擇僅使用某種類型)請記住這一點。
一般來說,我更喜歡使用QString
超過std::string
和Qt容器(如QList
,...)在std
容器中的代碼,是緊耦合到Qt框架,反正沒有它,就沒有意義。在所有其他組件(如輔助庫等)中,爲了靈活性,我更喜歡使用標準的C++方式。
但我認爲這是更主觀的決定,因爲類型通常很容易相互轉換(而Qt容器也提供標準的一致性迭代器)。雖然在Qt高度集中的代碼中,Qt容器可能會更好,尤其是與Qt的元對象和類型系統一起使用。
我想這是由你來決定的。不管怎麼說,在兩者之間進行轉換需要一個字符串的副本,所以如果兩者都需要轉換,那麼它的性能不好:例如QString::fromStdString和QString::fromStdWString。如果你使用Qt,我想你可能不僅僅使用QString,在這種情況下,大多數Qt類的方法都要求你提供QString。所以,寫作可能會對性能造成不利影響。
同時考慮到std :: string從實現到實現略有不同,std :: string copy-on-write可能會顯示不同的性能。
QStrings和C++字符串解決了不同的問題 - 主要區別在於QStrings明確地處理locales/encodings,而std :: strings不處理。
因此,對用戶輸入的所有數據以及要顯示給用戶的所有字符串使用QStrings,否則可能會丟失編碼轉換中的信息和/或使將來國際化應用程序變得更加困難。
對於任何我只需要char *等價物的地方,例如保持數據從地區/編碼不適用的數據庫中讀取,我使用std :: strings,因爲它們非Qt庫更容易使用,並且數據不會通過任何編碼轉換。 但是,你必須明確地將它們添加到qt類型系統中,以便能夠在信號/插槽參數中使用它們,一旦知道如何,這很容易。
但最後它是一個判斷調用 - 只是爲了讓你的代碼庫更容易被新手訪問,如果你使用的是非QtCore,那麼在任何地方使用QString或者可能只是std :: string都可能更好-gui應用程序
您的鏈接已損壞。 –