好奇心の高まりから、本当の根底にあるC++文字列リテラルの種類は何か不思議です。C++の文字列リテラルのタイプ
私が観察していることに応じて、私は異なる結果を得ます。次のような
のtypeid試験:
std::cout << typeid("test").name() << std::endl;
は私char const[5]
を示しています。その(指定されたエラーを参照してください)のような互換性のない型に文字列リテラルを代入しようとすると
:
wchar_t* s = "hello";
私はVS12のインテリセンスからa value of type "const char *" cannot be used to initialize an entity of type "wchar_t *"
を取得します。
しかし、私は次の行がVS12に受け入れられるよう、それはconst char *
の可能性がどのように表示されていない。私はそれがためにあったように、これは事前にC++ 11の標準規格で許可されたことを読んだことがある
char* s = "Hello";
s
を変更すると、未定義の動作になりますが、Cとの互換性はありません。私はこれが単にVS12であり、まだC++ 11標準のすべてを実装しておらず、この行は通常エラーになると想定しています。
マルチバイト文字 配列次いでだけ静的記憶域期間と長さの配列を初期化するために使用される:C99規格(from here、6.4.5.5)を読み出す
は、アレイがなければならないことを示唆しています配列を含めるのに十分である。
したがって、C++文字列リテラルの下の型は何ですか?
大変ありがとうございます。
VS12は似ているいくつかの奇妙な方言を話すが、C++、同一ではありません。 –