8

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

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

1 回答 1

6

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

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

是的。字符串文字以 null 结尾并n指向此类字符串文字。


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

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

该标准不允许字符串文字模板。有文件N3599提议将其添加到标准中,它是为 C++14 设计的,但没有达成共识,它还没有成为标准的一部分。GCC 和 Clang 至少似乎已经将其作为语言扩展实现了。

实际上,文字运算符模板不接收空字符作为其参数之一。

提案 N3599:

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

于 2017-06-27T12:22:25.973 回答