Идеон и кодепад действительно не поддерживают C ++ 03?
-
29-09-2019 - |
Вопрос
Мой вопрос связан с 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