IDEONEとCODEPADは、C ++ 03を実際にサポートしていませんか?
-
29-09-2019 - |
質問
私の質問はに関連しています プラソーン's 質問 非ポッドの種類と値の初期化について。
IdeoneやCodePadなどのオンラインコンパイラで次のコードを試しましたが、実行可能ファイルは両方のサイトでランタイムエラーを与えました。
#include <iostream>
#include <cassert>
struct Struct {
std::string String;
int Int;
bool k;
};
struct InStruct:Struct
{
InStruct():Struct(){}
};
int main()
{
InStruct i;
assert ( i.Int == 0);
std::cout << "Hello";
}
それはどちらもC ++ 03値の初期化機能をサポートしていないことを意味しますか?
解決
それはどちらもC ++ 03値の初期化機能をサポートしていないことを意味しますか?
はい。
バージョン4.4以前は、GCCは値の初期化を完全にサポートしていませんでした(ブーストGCC互換性ヘッダー これを説明し、関連するGCC欠陥レポートへのリンクを持っています。 77行を参照)。
コードがポータブルである必要がある場合は、価値の初期化に頼ることに非常に注意する必要があります。 GCCは最近までそれを完全にサポートしておらず、Visual C ++は最新バージョンのVisual C ++ 2010でも完全にはサポートしていません。
他のヒント
宣言
InStruct i;
値の初期化を呼び出しません
$ 8.5.3/10-「初期イザーが空の括弧のセットであるオブジェクト、すなわち、()は、価値のあるものでなければなりません。」
あなたがInitializeを評価したい場合、あなたは次のような表現が必要になります
assert(InStruct().Int == 0);
試す それ 今! -IDEONEはGCC-4.5.1をサポートします
所属していません StackOverflow