答えて
変換
char* p = "foobar";
はC++ 98/C++ 03に廃止され、そしてC++ 0Xで(つまり、§4.2/ 2除去)除去されています。
したがって、コードはであり、無効なはC++ 0xです。
ただし、MinGW g ++ 4.4.1では、エラーではなく、警告のみが出力されます。 (C++ 0Xで除去される)
C++ 98/C++ 03§4.2/ 2:ワイド文字列リテラル缶ないリテラル
列(2.13.4) "char
へのポインタ"のタイプの値に変換されます。ワイド文字列リテラルは、 "wchar_t
へのポインタ"というタイプのrvalueに変換できます。どちらの場合でも、結果は配列の最初の要素へのポインタになります。この変換は、明示的に適切なポインタのターゲット型がある場合にのみ考慮され、左辺値から右辺値に変換する一般的な必要性がない場合には考慮されません。 [注:この変換は推奨されていません。附属書Dを参照]。過負荷解決(13.3.3.1.1)のランク付けのために、この変換は配列からポインタへの変換とそれに続く修飾変換(4.4)と考えられる。 [例:は、配列へのポインタ変換として "const char
へのポインタ"に変換され、修飾変換として "char
へのポインタ"に変換されます。 ]
'-std = C++ 0x'のg ++ 4.4.5でも警告が出ます。 –
§4.2/ 2はもともと文字列リテラルから 'char *'変換についてのものだったと思いますか?可能であれば、C++ 03標準の段落を引用符として含めることができれば涼しいでしょう:) – fredoverflow
@Fred:C++ 03から段落を追加しました。 @Alf:あなたと一緒にOKです。 – sbi
私はこれが現在C++ 0xでは不正であると信じています。 C++ 03にはこのレガシーコードの変換に関する特別な注意点がありましたが、C++ 0xはそれを削除していますが、今はconstの正確性に違反しています。
実際のコンパイラがそれを削除したかどうかはわかりませんが、彼らの権利の範囲内であることは間違いありません。
- 1. 配列に文字列リテラルを割り当てる
- 2. nullに文字列リテラルとGCを割り当てる
- 3. 文字列リテラルを割り当てる方法
- 4. C変数へのスウィート文字列リテラルの割り当て
- 5. 文字列リテラルstrcpyのメモリ割り当て
- 6. C++でchar *型のポインターに文字列リテラルを割り当てることができる理由
- 7. Cで別の文字配列にchar配列を割り当てる方法
- 8. TypeScriptがネイティブ文字列リテラル割り当てエラーに反応する
- 9. C++で文字列オブジェクトにcharを割り当てる方法は?
- 10. 割り当てリテラル配列変数
- 11. 割り当てる文字列は
- 12. 文字列に文字を割り当てる方法は?
- 13. は、文字列を割り当て_スウィフト
- 14. リテラル文字列にchar配列を代入する - C++
- 15. Python文字列の割り当て
- 16. Python文字列の割り当てエラー
- 17. Java文字列の割り当て
- 18. 文字列の割り当て
- 19. 文字列の割り当てエラー
- 20. C++での文字列割り当て
- 21. CPythonの文字列 - メモリ割り当て
- 22. 文字列の割り当てメモリ
- 23. C++文字列割り当てエラー
- 24. char *への文字割り当ては機能しません
- 25. 文字列の値を文字列配列に割り当てる
- 26. 文字列作成と文字配列メモリ割り当て
- 27. 文字列の文字が文字に割り当てられている
- 28. クラスプロパティに文字列配列を割り当てる
- 29. 文字列の配列を動的に割り当てる
- 30. C++の文字列リテラルからconst char *を返しますか?
これは機能し続け、貧弱なスタイルです。 –
GCC 4.6では、「文字列定数からchar *への非推奨の変換」と表示されています。 –
よく、それは 'const char *'でなければなりません。より正確には –