「条件演算子を使いこなせない – 涼の成長記録」の記事を読んで、興味深かったので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はチェックが厳しくなっていて、より安全なプログラムが書けるようになっていました。