在C 中宣告編譯時字串
簡介
在C 中,宣告編譯時字元串,在整個編譯過程中保持不變,可能會很麻煩。傳統方法需要指定可變字元序列:
using str = sequence<'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!'>;
現有方法:挑戰與限制
理想情況下,聲明編譯時字串應該更簡單,例如:
using str1 = sequence<"Hello, world!">; constexpr auto str2 = "Hello, world!"_s;
然而,這些方法面臨障礙:
解:str_const 函式庫
Scott Schurr 在 C Now 2012 上的演講中,strid函式庫提供了一個方便的解決方案:
constexpr str_const my_string = "Hello, world!"; static_assert(my_string.size() == 13); static_assert(my_string[4] == 'o'); constexpr str_const world(my_string, 7, 5); static_assert(world == "world");
該解決方案提供了constexpr 範圍檢查和靈活的子字串檢索等優點,而無需
更新:C 17 和std::string_view
在C 17 中,std::string_view提供了類似的解決方案:
constexpr std::string_view my_string = "Hello, world!"; static_assert(my_string.size() == 13); static_assert(my_string[4] == 'o'); constexpr std::string_view world(my_string.substr(7, 5)); static_assert(world == "world");
這種方法提供以下優點:
以上是如何在 C 中簡潔地聲明編譯時字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!