为什么从字符串文字到 'char*' 的转换在 C 中有效但在 C 中无效
在 C 的 § C.1.1 中11 标准 (ISO/IEC 14882:2011),声明了赋值 char* p = "abc" 无效的。但是,这种转换在 C 中仍然有效。为什么会出现这种情况?
C 中已弃用隐式转换
在 C 03 之前的 C 版本中,从'char*' 的字符串文字是有效的,尽管已被弃用。字符串文字应被视为“char const *”,因为如果没有未定义的行为,则无法修改其内容。
显式转换仍然有效
尽管隐式转换已弃用在 C 11 中,显式转换仍然有效。为了使代码编译,可以添加强制转换: char* p = (char*)"abc".
强制转换的缺点
但是,这种显式转换不“修复”代码。它只是允许编译器接受赋值。修改字符串文字的潜在问题仍然存在。
解决方案:使用正确的类型
处理字符串文字的正确方法是使用正确的类型,' char const *':char const *p =“abc”。这种方法在 C 和 C 中都是有效且安全的。
C 中的理由
转换在 C 中仍然有效,因为大量现有代码依赖于它。标准委员会认为在没有适当警告的情况下破坏此代码是不可取的。
以上是为什么字符串文字到'char*”的转换在 C 中有效但在 C 中无效?的详细内容。更多信息请关注PHP中文网其他相关文章!