在一些关于 ruSO 的问题中,例如,这里,以及 CyberForum 上的问题(例如,这里),以及一般在 Internet 上,很多人都会遇到问题标题中描述的问题。如何解决它,我从同样的问题中知道。它发生的原因也是众所周知的。问题是,为什么我没有想到呢?
更详细地说:我试图重现问题以解决第一个链接上的问题,以便检查我的解决方案,然后将其写下来作为回应。而且我发现,从其他人那里提出问题的所有事情都可以正常工作并且没有任何问题。例如,这个简单的代码:
#include <iostream>
int main()
{
char * x = "Hello";
std::cout << x << std::endl;
getchar();
return 0;
}
编译没有问题,并在 VS 2015 和 VS 2008 上按预期输出“Hello”。
再一次,问题是:为什么上面描述的问题不能为我重现并且const char *分配没有问题char *?发生此错误的条件是什么?
这个问题已经存在很久了。但是,2013 之前的 Visual Studio 版本实现了非标准行为,并允许在没有
const字符串文字限定符的情况下进行批量指针初始化。然后他们走上了符合标准的道路,Visual Studio 2013 引入了通过/Zc:strictStrings. 并且从 Visual Studio 2017 开始,出现了通用标准合规模式/permissive-,现在创建新项目时默认使用该模式。此外,另一种不符合行为的情况已得到修复 - 尝试使用
bool字符串文字直接初始化bool foo{"foo"};现在被正确识别为错误。