在我认为符合 C++11 标准的 MSVS2013 中,编译器不喜欢以下内容:

LPCTSTR str = _T("boo " "hoo");

这意味着:
wchar_t const * str = L"boo " "hoo";

根据 cppreference.com (我知道这不是确定的,但这是我目前唯一的引用资料):
  • 并排放置的字符串文字在编译期间连接在一起。即“你好”、“世界!”产生(单个)字符串“Hello, world!”。
  • 如果两个字符串具有相同的编码前缀(或两者都没有),则生成的字符串将具有相同的编码前缀(或没有前缀)。
  • 如果其中一个字符串具有编码前缀而另一个没有,则认为没有的字符串与另一个具有相同的编码前缀。
  • 如果 UTF-8 字符串文字和宽字符串文字并列,则程序格式错误。
  • 实现可能支持或不支持任何其他编码前缀组合。这种串联的结果是实现定义的。

  • 重点是我自己。

    任何人都可以确认这是否在 cppreference 指示的标准中?

    编辑

    不喜欢,我的意思是我收到以下错误:
    error C2308: concatenating mismatched strings
    

    最佳答案

    2003 ISO C++ 标准第 2.13.4p3 节说:



    2011 年标准第 2.14.5p13 节说:



    因此序列 L"boo " "hoo" 在 C2003 中具有未定义的行为,但在 C2011 中定义良好且等效于 L"boohoo"

    我无法从您提供给我们的信息中判断 MSVS2013 是否符合 C++11。你说它“不喜欢”这个结构,但如果不喜欢被表达为非致命警告并且语义符合 2011 标准中的规定,那么它可能是符合的。

    您能否更新问题以显示诊断消息?

    关于c++ - 当前缀字符串与非前缀字符串相邻时,字符串文字连接失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20687283/

    10-10 09:27