VS 2017 不会隐式将常量字符* 转换为字符*

VS 2017 Doesn't Implicitly Convert const char* to char*

本文关键字:字符 常量 转换 2017 VS      更新时间:2023-10-16

我最近安装了VS 2017,遇到了一个奇怪的问题。 基本上,如果不将它们显式转换为 (char*(,我就无法使用硬编码字符串。 如果我说类似 Function("test") ,它只会抛出一个错误,说明 const char* 与 char* 不兼容。 我真的不想坚持VS 2015:(。 有人知道如何让VS认识到这些是一回事吗?

提前非常感谢。

> VisualStudio 2017 15.5 开始为所有新解决方案设置 /permissive- 标志,这不允许将字符串文字隐式转换为非常量char*。 您可以编辑解决方案的属性以在更新基本代码以符合C++标准时禁用该标志。 它在项目属性中"C/C++"下的"语言"选项卡中列为"一致性模式"。

您不应该将字符串文本分配或强制转换为char*,因为修改字符串文本是非法的,即使通过指向非常量字符的指针也是如此。

C++98(和 C99(标准中允许将字符串文本隐式转换为 char* 的错误行为,但在 C++11 和 C11 标准中已弃用,但已弃用。

将字符串文本分配给

数组变量具有值(复制(语义,而不是指针变量的引用语义,因此您可以将字符串文本分配给非常量字符数组,并对其进行修改。

char mutable_string[] = "tha string";
mutable_string[2] = 'e'; // OK

数组变量比指针变量更有用,因为它们在编译时保留大小信息,因此最好定义一个不可变的 C 字符串,例如

constexpr char immutable_string[] = "the immutable string";