引言
之前在windows中写const的总结, 在vs17中测试代码, 结果在测试字符串面值时出现了意料之外的错误.
问题
char *str = "vs2017";
这行代码在gcc中能够通过编译, 只是有一个警告 : warning: ISO C++ forbids converting a string constant to char* [-Wwrite-strings]
但是在vs中却不能通过编译, 错误 :

所以同样我在做const与typedef的问题上, vs已无法编译通过, 例子如下 :
typedef char * type;
const type str = "str2017";
错误的结果也是一样, 然而gcc同样能够通过编译.

解决
一种办法是换一个编译器试试, 还有一种可以用vs自带的中断工具编译就可以, 但是肯定有人愿意直接使用编译软件本身, 解决办法微软官方也是有写. 这里简单的修改方法写出.
以上问题在于软件设置编译时命令行默认参数.
右键文件, 选择文件属性, 你就可以看到这样的界面, 再选择命令行就可以看到这样的命令行参数, 问题就在/permissive- : 就是禁止像字面值转为普通指针这样不安全的隐患.

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


参考
/permissive- (Standards conformance)

在VS2017中,遇到将字符串字面量转换为`const char*`时的编译错误。GCC虽然能编译但有警告。解决方法是修改VS的编译器设置,禁用`/permissive-`选项以避免不安全的转换,或者在语言设置中选择禁止字符串字面量转换。
506

被折叠的 条评论
为什么被折叠?



