用户定义的字符串文字,字符串是否终止?
user defined string literal, is string null terminated?
对于用户定义的字符串文字,如果我使用以下形式的定义,给定的字符串是否保证以 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;
}
user defined string literal, is string null terminated?
void operator"" _x( const char* n, size_t s)
是的。字符串文字以 null 结尾,n
指向此类字符串文字。
If I use this version of definition I see no null termination character!
template <class T, T... Chrs>
void operator""_s()
标准不允许字符串文字模板。有文档 N3599 which proposes its addition to the standard, and it was intended for C++14 but there was no consensus,它还没有成为标准的一部分。 GCC 和 Clang 至少似乎已经将其实现为语言扩展。
确实,文字运算符模板不接收空字符作为其参数之一。
Proposal N3599:
the remaining arguments are the code units in the string literal (excluding its terminating null character).
对于用户定义的字符串文字,如果我使用以下形式的定义,给定的字符串是否保证以 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;
}
user defined string literal, is string null terminated?
void operator"" _x( const char* n, size_t s)
是的。字符串文字以 null 结尾,n
指向此类字符串文字。
If I use this version of definition I see no null termination character!
template <class T, T... Chrs> void operator""_s()
标准不允许字符串文字模板。有文档 N3599 which proposes its addition to the standard, and it was intended for C++14 but there was no consensus,它还没有成为标准的一部分。 GCC 和 Clang 至少似乎已经将其实现为语言扩展。
确实,文字运算符模板不接收空字符作为其参数之一。
Proposal N3599:
the remaining arguments are the code units in the string literal (excluding its terminating null character).