c – 是否可以为字符串文字创建模板化的用户定义文字(文字后缀)?

当我发现可以模仿用户定义的文字时,我感到很惊讶:

template <char ...C> std::string operator ""_s()
{
    char arr[]{C...};
    return arr;
}

// ...

std::cout << 123_s;

但上面的声明不适用于字符串文字:

"123"_s

给我以下错误:

prog.cpp: In function ‘int main()’:
prog.cpp:12:15: error: no matching function for call to ‘operator””_s()’
std::cout << “123”_s;

prog.cpp:4:34: note: candidate: template std::string operator””_s()
template std::string operator “”_s()

prog.cpp:4:34: note: template argument deduction/substitution failed:

(Ideone)

是否有一种方法可以将模板化的用户定义文字与字符串文字一起使用?

最佳答案 Clang和GCC支持允许您执行的扩展

template<class CharT, CharT... Cs>
std::string operator ""_s() { return {Cs...}; }

但标准C中没有任何内容;标准化这个的提议已经多次提出并且每次都被拒绝,最近不到一个月之前,主要是因为模板参数包是一种表示字符串的非常低效的方式.

点赞