美文网首页
C++ 23: 不允许连接非相同类型的宽字符串

C++ 23: 不允许连接非相同类型的宽字符串

作者: fck_13 | 来源:发表于2021-07-09 01:08 被阅读0次

    在C++ 中,连续的两个或多个字符串常量会在翻译期被连接在一起,例如

    auto concatedStr = "Hello," "World";
    <=>
    auto concatedStr = "Hello,World";
    

    然而,对于下面的这些例子

    { auto a = L"" u""; }
    { auto a = L"" u8""; }
    { auto a = L"" U""; }
    { auto a = u8"" L""; }
    { auto a = u8"" u""; }
    { auto a = u8"" U""; }
    { auto a = u"" L""; }
    { auto a = u"" u8""; }
    { auto a = u"" U""; }
    { auto a = U"" L""; }
    { auto a = U"" u""; }
    { auto a = U"" u8""; }
    

    行为是不确定的,依赖于编译器的具体实现。不幸的是,常用的编译器,msvc,gcc,clang都没有完美的支持这些字符串常量的连接,所以,C++ 23 提出,直接将这些例子定义为 ill-formed
    标准规定:
    挨着的两个字符串常量会在翻译阶段被连接。如果两个字符串常量有同样的编码前缀,则连接后的字符串的编码前缀与之相同;如果只有一个字符串常量有编码前缀,则连接后的字符串常量的编码前缀与之相同;其他形式的连接都是ill-fromed

    相关文章

      网友评论

          本文标题:C++ 23: 不允许连接非相同类型的宽字符串

          本文链接:https://www.haomeiwen.com/subject/wapxpltx.html