什么是C++ 20的字符串文字运算符模板?Cppreference 在这方面的例子非常简洁,对我来说不是很清楚:
struct A { A(const char *); auto operator<=>(const A&) const = default; };
template<A a> A operator ""_a();
Run Code Online (Sandbox Code Playgroud)
在试图理解这个特性是什么时,我刚学会了你可以在C++中使用数字文字运算符模板,这使得数字常量的每个数字都作为非类型参数传递给模板(参见这里更好的解释) .目前,文字运算符模板不支持字符文字,尽管有编译器扩展可以实现这一点.我不认为C++ 20的 字符串文字运算符模板与此有关,因为我已经了解到扩展文字运算符模板以处理字符文字的提议在委员会中被否决了?
当我发现可以将用户定义的文字模板化时,我感到很惊讶:
template <char ...C> std::string operator ""_s()
{
char arr[]{C...};
return arr;
}
// ...
std::cout << 123_s;
Run Code Online (Sandbox Code Playgroud)
但以上声明不适用于字符串文字:
"123"_s
Run Code Online (Sandbox Code Playgroud)
给我以下错误:
prog.cpp:在函数'int main()'中:
prog.cpp:12:15:错误:没有匹配的函数可调用'operator“” _ s()'
std :: cout <<“ 123” _s;prog.cpp:4:34:注意:候选:模板std :: string运算
符“” _s()模板std :: string运算符“” _s()prog.cpp:4:34:注意:模板参数推导/替换失败:
有没有办法将模板化的用户定义文字与字符串文字一起使用?