我最近安装了VS 2017,并遇到了一个奇怪的问题。基本上,我不能使用硬编码的字符串而不明确地将它们转换为(char *)。如果我说Function("test")
之类的东西,它只会抛出一个错误,指出const char *与char *不兼容。我真的不想坚持VS 2015 :(。任何人都知道如何让VS认识到这些是同一回事?
提前多多感谢。
答案 0 :(得分:6)
VisualStudio 2017 15.5开始为所有新解决方案设置/permissive-
标志,这禁止将字符串文字隐式转换为非常量char*
。您可以编辑解决方案的属性以在更新代码库时禁用该标志以符合C ++标准。它被列为"一致性模式"在"语言"选项卡" C / C ++"在项目的属性中。
答案 1 :(得分:3)
您不应该将字符串文字分配或转换为char*
,因为修改字符串文字是非法的,即使通过指向非const字符的指针也是如此。
允许将字符串文字隐式转换为char*
的错误行为,但在C ++ 98(和C99)标准中已弃用,但在C ++ 11和C11标准中已删除。< / p>
将字符串文字分配给数组变量具有值(复制)语义,而不是指针变量的引用语义,因此您可以将字符串文字分配给非const char数组,并修改它。
char mutable_string[] = "tha string";
mutable_string[2] = 'e'; // OK
数组变量比指针变量更有用,因为它们在编译时保留了大小信息,所以定义一个不可变的C字符串比如
更好constexpr char immutable_string[] = "the immutable string";