C++ の最新バージョンでは、ステートメントbool
内の条件を評価するときに、クラスの演算子を使用しようとします。演算子が存在しない場合に使用if()
されるなど、その他のキャスト演算子。これを以下に示します。int
bool
#include <iostream>
using namespace std;
class TwoInts {
public:
int a,b;
operator bool() { cout << "TwoInts to bool" << endl; return 0;}
operator int() { cout << "TwoInts to int" << endl; return 0;}
};
class SixInts {
public:
int a[6];
operator int() { cout << "SixInts to int" << endl; return 0;}
};
int main(void) {
TwoInts T;
SixInts S;
if (T) cout << "xxx" << endl;
if (S) cout << "xxx" << endl;
return 0;
}
このコードを実行しても驚くことはありません:
TwoInts to bool
SixInts to int
古い C++ コードを見てみると、確認したい変更があるようです。
古いバージョンの C++ では、ステートメントint
の条件を評価するときにクラスの演算子を使用していましたか? if()
もしあれば、それはどのバージョンですか?
提案された出力は次のようになります
TwoInts to int
SixInts to int
質問の理由に関する詳細: 古い大きな整数クラスを変換する際のint
問題はbool
、if()
. 古いコンパイラにアクセスできなくなったため、古い動作をテストできません。
[編集]
以下の回答といくつかの調査を使用:
回答:はい、ISO 標準 C++ より前の多くのバージョン (1980 年代半ばから 1998 年) には、 a がなく、(または他の数値型)bool
へのキャストが使用されていました。int
重要なコンパイラのバリエーションが存在しました - それはプレスタンダードでした。
最初の C++ ISO 標準は 1998 年に登場しました (ISO/IEC 14882:1998 別名 C++98)。タイプを定義しましたbool
。したがって、ISO 標準 C++ は常にbool
キャスト inを使用してきましたif()
。