如何解决无法在编译时将数组转换为字符串视图 constexpr basic_string_view(const CharT* s, size_type count):constexpr basic_string_view(const CharT* s):constexpr basic_string_view(It first, End last):constexpr basic_string_view(R&& r)
我试图在编译时将 1 个字符转换为 std::string_view
,因为 std::string_view
是 constexpr
。
测试:
consteval void test() {
constexpr auto str = char_to_string<'1'>();
}
这是char_to_string
函数的定义:
template <char N>
consteval std::string_view char_to_string() {
...
}
我尝试了 std::string_view
中的不同构造函数,但它们都不起作用:
constexpr basic_string_view(const CharT* s,size_type count)
:
原始数组:
constexpr const char arr[] = {N,'\0'};
return {arr,1}; // even if I cast `arr` explicitly to `const char*`
std::array
:
constexpr std::array arr = {N,'\0'};
return {arr.data(),1};
constexpr basic_string_view(const CharT* s)
:
原始数组:
constexpr const char arr[] = {N,'\0'};
return arr; // or `{arr}`
std::array
:
constexpr std::array arr = {N,'\0'};
return arr.data(); // or `{arr.data()}`
constexpr basic_string_view(It first,End last)
:
原始数组:
constexpr const char arr[] = {N};
return {std::ranges::begin(arr),std::ranges::end(arr)};
std::array
:
constexpr std::array arr = {N};
return {arr.begin(),arr.end()}; // `{arr.cbegin(),arr.cend()}` won't work either
constexpr basic_string_view(R&& r)
嗯,这是 C++ 23 的补充,libstdc++ 已经实现了。
原始数组:
constexpr const char arr[] = {N};
return std::ranges::subrange(std::ranges::begin(arr),std::ranges::end(arr));
std::array
:
constexpr std::array arr = {N};
return arr;
它们都将失败并共享一个常见的编译器错误:
-
std::string_view{...}
不是常量表达式
我不知道为什么,但是所有的 std::string_view
构造函数都声明为 constexpr
并且 std::array
已经是 constexpr
并且我还将原始数组声明为 {{ 1}}。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。