Идеон и кодепад действительно не поддерживают C ++ 03?

StackOverflow https://stackoverflow.com/questions/4121296

Вопрос

Мой вопрос связан с 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 здесь
Выход CodePad здесь

Значит ли это ни один из них, не поддерживает функцию инициализации стоимости C ++ 03?

Это было полезно?

Решение

Значит ли это ни один из них, не поддерживает функцию инициализации стоимости C ++ 03?

Да.

До версии 4.4 GCC не полностью поддерживает инициализацию стоимости (Заголовок совместимости Boost GCC Объясняет это и имеет ссылки на соответствующие отчеты о дефектах GCC; См. Линию 77).

Если ваш код должен быть портативным, вы должны быть очень осторожны, опираясь на инициализацию стоимости; GCC не поддерживает его полностью до недавнего времени, и Visual C ++ не полностью поддерживает его даже в своей последней версии Visual C ++ 2010.

Другие советы

Декларация

InStruct i; 

не вызывает инициализацию стоимости

8,5,3 / 10 $ / 10 - «Объект, инициализатор которого является пустой набор скобок, т. Е. (), должен быть инициализирован значением».

Если вы хотите оценить - инициализация, вам потребуется выражение что-то вроде

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

Пытаться Это Теперь! - IDeOne поддерживает GCC-4.5.1

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top