鍋あり谷あり

テーマを決めずに適当に書いています。

私の知らないC++

好評かどうかは知らないんだが、引き続き C++の話。
この前までのは「知らなかった」なんだが、今回のはいまだに知らないので「知らない」となっている。
無知をさらけ出すのは恥ずかしいことのはずなんだが、このシリーズで書いている内容についてはあまり恥ずかしいという気持ちにはなってない。

で。
今回は、ポインタに変換できるゼロって何? という話の続き。

int zero(){  return 0;  }
void test()
{
  char * c = true ? 0 : zero(); // g++ だと通る。cl ではエラー。
}

今回は、マイクロソフト cl の方が好ましいように思うんだが、仕様としてはどちらが正しいのか不明。あるいは「未定義」なのか。
先日と同じ理由で、これはトラブルの原因になる:

struct x{ x(double){} };
void foo( x ){  cout << "x" << endl;  }
void foo( char * ){  cout << "char *" << endl;  }
void test2()
{
  foo( true ? 0 : zero() ); // g++ "char *"。cl だと "x"。
}

暗黙の型変換は恐ろしい。

それとは関係ないが。
アップルのiMac G5欲しい!
手に入ったら、オーディオの近くに置いて、ジュークボックスにでもしようかしらん。
母にあげるというのも面白いか。

#写真と本文は関係ありません。