пометить значение перечисления c ++ как устаревшее?

Почему не может быть ответа, что он вызывает и то и другое?

Очевидно, что память просочилась, происходит ли повреждение кучи или нет.

Вернее, поскольку я могу заново реализовать новое и удалить ..... не может ли это вообще ничего не вызывать. Технически я могу вызвать новое и удалить, чтобы выполнить новое [] и удалить [].

HENCE: неопределенное поведение.

22
задан Benjamin 21 May 2014 в 16:46
поделиться

1 ответ

вы можете сделать это:

enum MyEnum {
    firstvalue = 0,
    secondvalue,
    thirdvalue, // deprecated
    fourthvalue
};
#pragma deprecated(thirdvalue)

затем, когда бы ни использовалась переменная, компилятор выведет следующее:

warning C4995: 'thirdvalue': name was marked as #pragma deprecated

РЕДАКТИРОВАТЬ
Это выглядит немного странно, и у меня нет компилятора GCC, чтобы подтвердить (кто-то может сделать это для меня?), Но это должно работать:

enum MyEnum {
    firstvalue = 0,
    secondvalue,
#ifdef _MSC_VER
    thirdvalue,
#endif
    fourthvalue = secondvalue + 2
};

#ifdef __GNUC__
__attribute__ ((deprecated)) const MyEnum thirdvalue = MyEnum(secondvalue + 1);
#elif defined _MSC_VER
#pragma deprecated(thirdvalue)
#endif

это комбинация моего ответа и MSalters ' ответить

14
ответ дан 29 November 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: