VS17中字面值字符串问题

引言

之前在windows中写const的总结, 在vs17中测试代码, 结果在测试字符串面值时出现了意料之外的错误.

问题

 char *str = "vs2017";

这行代码在gcc中能够通过编译, 只是有一个警告 : warning: ISO C++ forbids converting a string constant to char* [-Wwrite-strings]

但是在vs中却不能通过编译, 错误 :

VS17中字面值字符串问题

所以同样我在做consttypedef的问题上, vs已无法编译通过, 例子如下 :

typedef char * type;

const type str = "str2017";

错误的结果也是一样, 然而gcc同样能够通过编译.
VS17中字面值字符串问题

解决

一种办法是换一个编译器试试, 还有一种可以用vs自带的中断工具编译就可以, 但是肯定有人愿意直接使用编译软件本身, 解决办法微软官方也是有写. 这里简单的修改方法写出.

以上问题在于软件设置编译时命令行默认参数.

右键文件, 选择文件属性, 你就可以看到这样的界面, 再选择命令行就可以看到这样的命令行参数, 问题就在/permissive- : 就是禁止像字面值转为普通指针这样不安全的隐患.

VS17中字面值字符串问题

所以最终删除/permissive 就行, 选中语言->符号模式->否. OK! 问题解决.

VS17中字面值字符串问题

VS17中字面值字符串问题

参考

/permissive- (Standards conformance)

/Zc:strictStrings (Disable string literal type conversion)

Give Visual C++ a Switch to Standard Conformance