質問

私の質問はに関連しています プラソーン'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";
}

IDEONE出力 ここ
CODEPAD出力 ここ

それはどちらも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をサポートします

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top