文字列リテラルから 'char*' への変換が C では無効であるのに C では有効である理由
C のより厳密な型システムにより、文字列リテラルを参照するための const char ポインタの使用により、次のような変更を防ぐことができます。未定義の動作。これは、文字列リテラルから 'char' への変換が暗黙的に許可されている C には存在しません。
この不一致に対処するために、C 11 では非推奨の暗黙的な変換を削除し、次のコードをレンダリングしました。
char* p = "abc";
は無効です。ただし、明示的なキャストでは互換性が維持されます。
char* p = (char*)"abc";
キャストは、基礎となる動作を回避しません。これにより、変換の実行は許可されますが、リテラルの変更による未定義の結果が防止されるわけではありません。
C では、この変換の有効性はレガシー コードの互換性のために維持されます。広範な既存のコードはこの暗黙的な変換に依存しているため、標準委員会が事前の警告なしにこの機能を破壊することは現実的ではありません。
そのため、C では型安全性を確保するために暗黙的な変換を禁止していますが、普及率を考慮して C では許可しています。コードベースの依存関係。ただし、潜在的な問題を避けるために、両方の言語で文字列リテラルに char const* を使用することを強くお勧めします。
以上が文字列リテラルの `char*` への変換が C では無効であるのに、C では有効なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。