问题描述
我试图在编译时将 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 (将#修改为@)