VS 2017 不会隐式将常量字符* 转换为字符*
VS 2017 Doesn't Implicitly Convert const char* to char*
我最近安装了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";
相关文章:
- 多字符常量警告
- const_cast<字符 *>(字符* 常量) 不是左值?
- 常量字符数组模板与字符常量* 函数重载
- 如何检查字符常量是否符合ASCII
- 从字符串数组转换为字符* 常量
- 字符常量或字符串常量
- 字符常量数组为空,即使已为其赋值 [C++]
- 如何创建 ' 字符常量
- 如何编写完全可移植的 4 字节字符常量的编译时初始化
- 我得到以下错误:[警告]多字符字符常量
- C++错误:警告:多字符字符常量/a用于用法
- 字符常量和函数名称的 sizeof() 背后的逻辑
- 如何在 C 中将多字符常量转换为整数
- C++ wifstream:不兼容的字符常量*,wchar_t康斯特*类型
- 不允许从"常量无符号字符*常量*"到"常量字符*常量*"static_cast
- 修改字符 *常量字符串
- 为什么字符常量/文字不能为空?
- C++字符 * 常量与字符 *,为什么有时一个有时另一个
- 警告多字符字符常量 [-Wmultichar]
- 开关语句多字符常量