Aja*_*jay 5 c++ c++11 c++14 visual-studio-2015
当我们有这些时:
auto city1 = "New " L"Delhi";
auto city2 = L"New " "York";
Run Code Online (Sandbox Code Playgroud)
任何VS2015之前的编译器都会引发错误:
错误C2308:连接不匹配的字符串
但是使用VC2015编译器,它编译得很好,结果类型(auto演绎)是一个宽字符串.
我的问题是:何时以及如何实现这一点 - 任何标准规范?
在C++ 03中,这种行为是未定义的.
ISO 14882-2003:2.13.4.3规定
在翻译阶段6(2.1)中,相邻的窄字符串文字被连接,并且相邻的宽字符串文字被连接.如果窄字符串文字标记与宽字符串文字标记相邻,则行为未定义.连接字符串中的字符保持不同.
不确定何时引入了更改,但行为至少在标准的N3242草案中已明确定义.
ISO 14882-2011:2.14.5.13声明
在翻译阶段6(2.2)中,相邻的字符串文字被连接起来.如果两个字符串文字具有相同的encoding-prefix,则生成的连接字符串文字具有该encoding-prefix.如果一个字符串文字没有编码前缀,则将其视为与另一个操作数相同的编码前缀的字符串文字.
因此,在您的情况下,auto正确推断为宽字符串文字.
| 归档时间: |
|
| 查看次数: |
1389 次 |
| 最近记录: |