连接不匹配的字符串在VC2015工作-如何
Concatenating mismatched string WORKS in VC2015 - How?
当我们有以下任何一个:
auto city1 = "New " L"Delhi";
auto city2 = L"New " "York";
任何vs2015之前版本的编译器都会抛出error:
错误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)中,相邻的字符串字面值被连接起来。如果两个字符串字面值具有相同的编码前缀,则结果连接的字符串字面值具有该编码前缀。如果一个字符串字面值没有编码前缀,它将被视为与另一个操作数具有相同编码前缀的字符串字面值。
因此,在您的示例中,auto
被正确地推断为宽字符串字量。
相关文章:
- 对象指针在c++中是如何工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- ios::fmtflags 在 C++ 中是如何工作的?setf() 是如何工作的?
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 将返回值存储在函数指针数组的指针中是如何工作的?
- Visual Studio 调试优化如何工作?
- 即使没有调用这个递归函数,它是如何工作的?
- type_info成员函数如何工作?
- 如何创建一个类,以便向量工作 std::vector<MyClass<int>> v{ 1,2,3 };
- C++17:如何在并行 STL 中获取工作项的索引
- 矢量和其他容器如何在磁盘上工作?
- numpy C API 中的import_array如何工作?
- std::数组边界检查如何工作?
- #if 如何工作?我误解了 #if~#endif 的形式吗?
- C++放置位置删除如何在内部(C++运行时)工作?如何克服其局限性?
- 两个超载的STD ::前进工作如何
- 程序已停止工作?如何使整数数组大小超过 1,000,000
- 析构函数之前可以工作.如何去做
- 连接不匹配的字符串在VC2015工作-如何
- Qt5.7安装在Raspberry Pi3上并工作…如何获得QtCreator