zoukankan      html  css  js  c++  java
  • warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

    在C++中,

    char* p = "abc";  // valid in C, invalid in C++

    会跳出警告:warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

    改成下面会通过warning

    char* p = (char*)"abc";  // OK

    或者改成下面:

    char const *p = "abc";  // OK

    原因解析:

    我们在学习c或者c++的时候都知道,如果在赋值操作的时候,等号两边的变量类型不一样,那么编译器会进行一种叫做 implicit conversion 的操作来使得变量可以被赋值。

     

    在我们上面的表达式中就存在这样的一个问题,等号右边的"abc"是一个不变常量,在c++中叫做string literal,type是const char *,而p则是一个char指针。如果强行赋值会发生什么呢?没错,就是将右边的常量强制类型转换成一个指针,结果就是我们在修改一个const常量。编译运行的结果会因编译器和操作系统共同决定,有的编译器会通过,有的会抛异常,就算过了也可能因为操作系统的敏感性而被杀掉。

    像这种直接将string literal 赋值给指针的操作被开发者们认为是deprecated,只不过由于以前很多代码都有这种习惯,为了兼容,就保留下来了。

    转:https://blog.csdn.net/VVVLeHr/article/details/86697346

     

  • 相关阅读:
    经验1
    Caffe和MatConvNet安装
    Matconvet的学习笔记
    CNN数据准备
    深度学习之卷积和池化
    深度学习之CNN的推导
    深度学习八(总结)
    深度学习七(卷积神经网络)
    深度学习六
    深度学习五
  • 原文地址:https://www.cnblogs.com/zkfopen/p/10521715.html
Copyright © 2011-2022 走看看