2009年8月16日日曜日

boolをfloatに暗黙の型変換?


#include <cstdio>

void func( float num )
{
  std::printf("%f\n", num);
}

int main()
{
  func( true );
  return 0;
}


 エラーも警告も表示されないのが納得いかない。
boolからfloatにって無理がないかい? 逆はともかく。

VC2005EE
警告レベル4



*追記09/08/29
 ぶらぶらしてたら以下のようなコードを見かけた。

dayofweek(y, m, d) /* 0 = Sunday */
int y, m, d; /* 1 <= m <= 12, y > 1752 or so */
{
static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
y -= m < 3;
return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}


随想録: 400年に一度の閏年
http://www.futatsugi.net/misc/essays/blog/archives/000003.html


 日付から曜日を求めるプログラムだそうだが、ぱっと見さっぱり分からない。それはともかく、y -= m < 3;というのは興味深い。trueはかならず1になるのだろうか。0以外なのは確かだが。

0 件のコメント: