在 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 上的演讲中,str_const 库提供了一个方便的解决方案:
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中文网其他相关文章!