2010-11-08 13 views
7

Moje pytanie dotyczy Prasoon 's question o typach innych niż POD i inicjowaniu wartości.Czy Ideone i Codepad naprawdę nie obsługują C++ 03?

Próbowałem następujący kod na kompilatory online, takie jak Ideone i Codepad, ale pliki wykonywalne dały błąd runtime na obu stronach.

#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 Wyjście here
Codepad Wyjście here

Czy to znaczy żaden z nich obsługuje C++ 03 funkcja inicjalizacji wartość?

Odpowiedz

4

Czy to znaczy żaden z nich obsługuje C++ 03 funkcja inicjalizacji wartość?

Tak.

Przed wersją 4.4 GCC nie w pełni obsługiwał inicjowanie wartości (the Boost GCC compatibility header wyjaśnia to i ma łącza do odpowiednich raportów o błędach GCC, patrz wiersz 77).

Jeśli Twój kod musi być przenośny, powinieneś bardzo ostrożnie polegać na inicjalizacji wartości; GCC nie obsługiwał tego w pełni do niedawna, a Visual C++ nie obsługuje go w pełni nawet w najnowszej wersji, Visual C++ 2010.

0

Deklaracja

InStruct i; 

nie powoływać inicjalizacji wartość

$ 8.5.3/10 - „Obiekt, którego inicjująca jest pusty zestaw nawiasach, czyli(), ustanawia być zainicjowanym wartością . "

Jeśli chcesz wartości inicjalizacji, należy wymagać czegoś podobnego wyrażenia

assert(InStruct().Int == 0); 
+0

O O. Ktoś pokonał, ale zapomniał o komentarzu – Chubsdad

+2

'InStruct' ma domyślny konstruktor. –

+0

@James McNellis: Ale klasa podstawowa "Struct" nie ma (która jest "Int") – Chubsdad

0

Wypróbuj teraz it! - Ideone obsługuje GCC-4.5.1

Powiązane problemy