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

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

DDD
DDDオリジナル
2024-12-17 10:11:25887ブラウズ

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

C と C における文字列リテラルから 'char*' への変換

C 11 標準では、文字列リテラルを 'char*' に変換すると明示的に規定されています。 'char*' は無効ですが、C では引き続き有効です。この相違は、2 つの言語の文字列の処理方法の根本的な違いに起因します。 literals.

C C での互換性

歴史的に、C では文字列リテラルから 'char' への非推奨の暗黙的な変換が許可されていました。ただし、C 11 では、この変換は正式に削除され、文字列リテラルは「char const 」として扱われるようになりました。これにより不変性が確保され、未定義の動作を引き起こす可能性のある変更が防止されます。

C での明示的なキャスト

C では暗黙的な変換は使用できなくなりましたが、C では明示的なキャストを行うことができます。 「char」は引き続き実行できます。ただし、これでは不変性の根本的な問題は解決されません。文字列リテラルからキャストされた 'char' が指す値を変更しても、未定義の動作が発生します。

C の安全第一

文字列リテラルの型 ('char const *') が正しい場合、C は安全性を優先します。リテラルを変更しようとするとエラーとしてフラグが立てられ、クラッシュの可能性が排除されます。

C のレガシー コード

C は、暗黙的なコードに依存する既存のコードとの互換性を維持します。文字列リテラルから「char*」への変換。この決定は、おそらくレガシー ソフトウェアの破壊を避けるために行われたと考えられます。ただし、互換性と安全性のバランスに関して、C と C の哲学の違いが浮き彫りになります。

要約すると、文字列リテラルから 'char' への変換は、C では無効です。不変の原則。 C では従来の理由からこの変換が許可されていますが、安全性を高めるために 'char const ' を使用することは強く推奨されません。

以上が文字列リテラルの `char*` への変換が C では無効であるのに、C では許可されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。