6

u6.c の期待される出力は ABC でしたが、ここでは CBA になりました。なぜそうなのですか? 詳細な説明でこれを明らかにしていただけますか?

union mediatech
{ 
 int i; 
 char c[5]; 
};

int main(){
 mediatech u1 = {2};               // 1
 mediatech u2 = {'a'};             // 2
 mediatech u3 = {2.0};             // 3
 mediatech u6 = {'ABC'};           // 6

 cout<<"\nu6.i = "<<u6.i<<" u6.c="<<u6.c;  // o/p: u6.i=4276803  u6.c=CBA
}
4

2 に答える 2

14

'ABC'を初期化するために複数文字リテラルを使用していますint

複数文字リテラル ( を使用する一般的な方法ではありません'') がどのように解釈されるかは、実装によって定義されます。具体的には、int解釈における個々の文字の順序は実装定義です。

このプログラムがキャラクターの順序で何をするかを予測するためのポータブル(つまり、実装に依存しない)方法はありません'ABC'

標準から (C++11、§2.14.3/1):

[...] 複数文字リテラルには、型intと実装定義の値があります。

于 2013-06-13T08:40:42.893 に答える