C 与 C 中从字符串文字到 'char*' 的转换
C 11 标准明确指出将字符串文字转换为'char*' 无效,但在 C 中仍然有效。这种差异源于两种语言处理字符串方式的根本差异
C 中的 C 兼容性
从历史上看,C 允许从字符串文字到 'char' 的已弃用隐式转换。然而,在 C 11 中,这种转换被正式删除,转而将字符串文字视为“char const ”。这确保了不变性,防止可能导致未定义行为的更改。
C 中的显式转换
虽然隐式转换在 C 中不再可用,但显式转换为'char' 仍然可以执行。然而,这并没有解决不变性的根本问题。修改字符串文字的 'char' 转换所指向的值仍然会导致未定义的行为。
C 中的安全第一
通过强制执行字符串文字的正确类型('char const *'),C 优先考虑安全。尝试修改文字将被标记为错误,从而消除崩溃的可能性。
C 中的旧代码
C 保持与依赖于隐式的现有代码的兼容性从字符串文字到“char*”的转换。做出这个决定可能是为了避免破坏遗留软件。然而,它凸显了 C 和 C 在平衡兼容性和安全性方面的哲学差异。
综上所述,从字符串文字到 'char' 的转换在 C 中是无效的,因为它违反了不变性原则。虽然 C 出于遗留原因允许这种转换,但强烈建议不要使用“char const ”来提高安全性。
以上是为什么将字符串文字转换为'char*”在 C 中无效但在 C 中允许?的详细内容。更多信息请关注PHP中文网其他相关文章!