C++Builder XE5で三項演算子の戻り値の型が異なるときの動作を調べてみた。

条件演算子を使いこなせない – 涼の成長記録」の記事を読んで、興味深かったのでC++Builder XE5で動作を確認してみました。

「三項演算子の真式と偽式は同じ型の値を返さなければならない。ただし、暗黙に型変換可能なら許されることもある。」
ということなので、次のようなコードを書いてみました。

TDateTime getDateTime(bool flag)
{
  // 真式はTDateTime型、偽式はint型を返す
  return (flag ? TDateTime(2013,1,1) : 0);
}

int _tmain(int argc, _TCHAR* argv[])
{
  std::wcout << FormatDateTime(L"yyyy/mm/dd", getDateTime(true)).c_str() << std::endl;
  std::wcout << FormatDateTime(L"yyyy/mm/dd", getDateTime(false)).c_str() << std::endl;

  return 0;
}

ターゲットプラットフォームが32ビットWindowsのときの実行結果は次のようになりました。

2013/01/01
1899/12/30

ターゲットプラットフォームが64ビットWindowsのときはコンパイルエラーになりました。

[bcc64 エラー] File1.cpp(15): 条件式があいまいです。’System::TDateTime’ は ‘int’ に変換でき、その逆もまた可能です

bcc64はチェックが厳しくなっていて、より安全なプログラムが書けるようになっていました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください