7

私の質問は、非PODタイプと値の初期化に関するPrasoon質問に関連しています。

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出力はこちら
コードパッド出力はこちら

それは、どちらもC ++ 03値の初期化機能をサポートしていないことを意味しますか?

4

3 に答える 3

4

それは、どちらもC ++ 03値の初期化機能をサポートしていないことを意味しますか?

はい。

バージョン4.4より前では、GCCは値の初期化を完全にはサポートしていませんでした(Boost GCC互換性ヘッダーはこれを説明し、関連するGCC欠陥レポートへのリンクがあります。77行目を参照してください)。

コードを移植可能にする必要がある場合は、値の初期化に依存することに非常に注意する必要があります。GCCは最近まで完全にはサポートしておらず、VisualC++は最新バージョンのVisualC++2010でも完全にはサポートしていません。

于 2010-11-08T04:54:33.893 に答える
0

宣言

InStruct i; 

値の初期化を呼び出さない

$ 8.5.3 / 10-「初期化子が空の括弧のセットであるオブジェクト、つまり()は、値で初期化されます。」

値を初期化する場合は、次のような式が必要になります。

assert(InStruct().Int == 0);
于 2010-11-08T04:38:19.733 に答える
0

今すぐお試しください!-IdeoneはGCC-4.5.1をサポートします

于 2010-12-06T22:18:58.970 に答える