ホームページ > バックエンド開発 > C++ > 文字列リテラルの `char*` への変換が C では無効であるのに、C では有効なのはなぜですか?

文字列リテラルの `char*` への変換が C では無効であるのに、C では有効なのはなぜですか?

Patricia Arquette
リリース: 2024-12-19 22:32:12
オリジナル
911 人が閲覧しました

Why is Converting a String Literal to `char*` Invalid in C   but Valid in C?

文字列リテラルから '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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート