代码之家  ›  专栏  ›  技术社区  ›  Klaus

用户定义的字符串文字,字符串是否以null结尾?

  •  8
  • Klaus  · 技术社区  · 7 年前

    对于用户定义的字符串文字,如果使用以下定义形式,给定的字符串是否保证以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 回复  |  直到 7 年前
        1
  •  6
  •   Community CDub    4 年前

    用户定义的字符串文字,字符串是否以null结尾?

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

    对字符串文字以null结尾,并且 n 指向这样的字符串文字。


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

    该标准不允许使用字符串文字模板。这是文件 N3599 它建议将其添加到标准中,并打算用于C++14,但有 no consensus

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

    提案N3599:

    不包括其终止空字符 ).