2017-11-05 12 views
3

マルチバイト文字のサイズを決定する次のプログラムがあります。sizeof( 'ab')はsizeof(int)とC++で等しいですか?

#include<iostream> 

int main() 
{ 
    std::cout<<"size of multibyte characters : "<<sizeof('ab')<<std::endl; 
} 

マイGCCコンパイラは4

の出力を与えるので、私は次のような質問があります。

  • をリテラルマルチバイト文字のサイズは?
  • sizeof('ab')sizeof(int)と等しいか?
+5

@DimChtz:実際には残念ながら – Ryan

+2

あなたは[multicharacter literal](http://en.cppreference.com/w/cpp/language/character_literal)と呼ばれる言語の不明瞭な機能を偶然見つけました( bullet '(6)'を参照してください)。これらは実際には 'int'型です。これらは、マルチバイト文字エンコーディング(UTF-8やShift-JISなど)とは関係ありません。 –

+2

(6)を参照してください。http://en.cppreference.com/w/cpp/language/character_literal –

答えて

13

これは、単一の文字の対応とは異なり、タイプcharではないが、タイプintの(そのサポートを想定)は、いわゆる複数文字リテラルです。 [lex.ccon]/2で指定されているように、強調鉱山:U8で始まらない

文字リテラルは、uが、Uは、またはLは 通常の文字リテラルです。 が実行文字セット で表現可能な単一のc-charを含む通常の文字リテラルでは、実行文字セット内のc-charの符号化 の数値に等しい値の文字があります。 通常の文字 複数のc-charを含むリテラルは、マルチ文字の リテラルです。複合文字リテラルまたは実行 文字セットで表現できない単一のc-charを含む通常の文字リテラル は条件付きでサポートされ、型intを持ち、実装定義の値は です。

だから、疑わしい通りにsizeof(int)を印刷します。

関連する問題