【发布时间】:2017-06-27 12:01:14
【问题描述】:
对于用户定义的字符串文字,如果我使用以下定义形式,给定的字符串是否保证为空?我知道第二个参数给出的大小没有任何终止,如果有的话。
void operator"" _x( const char* n, size_t s)
{
std::cout << "String: " << s << " Len: " << s << std::endl;
}
如果我使用这个版本的定义,我看不到空终止字符!
template <class T, T... Chrs>
void operator""_s()
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
【问题讨论】:
-
@Rakete1111:写成:
template <char...> void operator "" _d(){} "Hallo"_d;格式不正确吗?这没有用 g++ 编译。这是否意味着不可能将任何模板化表单与用户定义的字符串文字一起使用? -
不,
template<char...> type operator""_d()是唯一允许的形式。模板的所有其他使用都是格式错误的。我不知道为什么它不能在 g++ 下编译,因为它为我这样做。 -
@Rakete1111:是的,编译为非字符串用户定义的文字。但我写了用户定义的 string 文字。你能用
"test"_d;编译吗? -
是的,抱歉。我读你的评论太快了。你是对的,没有办法让用户定义 string 文字。