用户定义的字符串文字,是否为字符串null终止?

时间:2017-06-27 12:01:15

标签: c++ user-defined-literals

对于用户定义的字符串文字,如果我使用以下形式的定义,则给定的字符串保证null终止吗?我知道第二个参数计数给出的大小没有任何终止,如果有的话。

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;
}

1 个答案:

答案 0 :(得分:6)

  

用户定义的字符串文字,是否为字符串空终止?

void operator"" _x( const char* n, size_t s)

是。字符串文字以null结尾,n指向此字符串文字。

  

如果我使用这个版本的定义,我看不到空终止字符!

template <class T, T... Chrs>
void operator""_s()

标准不允许使用字符串文字模板。文档N3599建议将其添加到标准中,它适用于C ++ 14但有no consensus并且它还没有成为标准的一部分。 GCC和Clang至少似乎已将其作为语言扩展实现。

实际上,文字运算符模板不会将null字符作为其参数之一。

  

提案N3599:

     

其余参数是字符串文字中的代码单元(不包括其终止空字符)。