为什么从字符串文字到 'char*' 的转换在 C 中无效,但在 C 中有效
C 更严格的类型系统强制执行使用 const char 指针来引用字符串文字,防止可能导致未定义行为的修改。这在 C 中是不存在的,其中隐式允许从字符串文字到“char”的转换。
为了解决这种不一致问题,C 11 删除了已弃用的隐式转换,呈现代码:
char* p = "abc";
无效。但是,显式强制转换可保持兼容性:
char* p = (char*)"abc";
强制转换不会规避底层行为。它允许进行转换,但不会阻止修改文字带来的未定义后果。
在 C 中,为了遗留代码兼容性而维护此转换的有效性。大量的现有代码依赖于这种隐式转换,这使得标准委员会在没有事先警告的情况下破坏此功能是不切实际的。
因此,虽然 C 禁止隐式转换以确保类型安全,但由于普遍性,C 允许它代码库依赖性。但是,强烈建议对两种语言的字符串文字使用 char const* 以避免潜在问题。
以上是为什么将字符串文字转换为'char*”在 C 中无效但在 C 中有效?的详细内容。更多信息请关注PHP中文网其他相关文章!