コード:
//このpに対して…
const char *p = "ab";
//こうしたら,'a' と 'b' が表示されるよね
std::cout << p[0] << std::endl;
std::cout << p[1] << std::endl;
//---
//っていうのと,まぁ,同じような話で,これでも 'a' と 'b' が表示されるよね.
// "ab" の型は多分,const char[3] だろうから,普通に配列の [0] と [1] を出力しているだけだ.
std::cout << "ab"[0] << std::endl;
std::cout << "ab"[1] << std::endl;
っていうのはOKであろうか?
OKならば,あとは
の部分がどうなるか? だけが問題になるよね.
配列の index の部分:
としては,int が必要(ってことで合ってるかな?)なんだけど,そこに書かれているのは
(i==3) で,これは bool になるから,bool から int へ暗黙的な型変換が行われるじゃないかな.
で,これが合ってれば,後は bool から int の変換ってどうなるのか? っていう.
bool → int の変換のルールについては,ググれば見つかるかと思うけど,true は 1 に,false は 0 になるハズ.
---
以上をまとめると,
index の部分は i が 3 のときだけ 1 で,あとは 0 になるわけだから,そのような出力結果になる,と.