gpt4 book ai didi

c++ - 当前缀字符串与非前缀字符串相邻时,字符串文字连接失败?

转载 作者:太空狗 更新时间:2023-10-29 20:04:19 26 4
gpt4 key购买 nike

在我认为符合 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 节说:

In translation phase 6 (2.1), adjacent narrow string literals are concatenated and adjacent wide string literals are concatenated. If a narrow string literal token is adjacent to a wide string literal token, the behavior is undefined. Characters in concatenated strings are kept distinct.

2011 年标准第 2.14.5p13 节说:

In translation phase 6 (2.2), adjacent string literals are concatenated. If both string literals have the same encoding-prefix, the resulting concatenated string literal has that encoding-prefix. If one string literal has no encoding-prefix, it is treated as a string literal of the same encoding-prefix as the other operand. If a UTF-8 string literal token is adjacent to a wide string literal token, the program is ill-formed. Any other concatenations are conditionally supported with implementation-defined behavior.

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

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

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com