#c #c 11
#c #c 11
Вопрос:
В моей книге «Язык программирования C » Бьярне Страуструп я прочитал о инициализации членов const и увидел следующий код (я меняю имена и значения переменных):
class ConstMembers
{
public:
static const int a = 1; // ok
static int b = 2; // error: non const
const int c = 3; // error: no static
static const float d = 2.3; // error: not integer
};
Но когда я запускаю этот код в Clion 2020.1 со следующей настройкой cmake
set(CMAKE_CXX_STANDARD 11)
в третьем случае
const int c = 3; // error: no static
я не получил сообщение об ошибке.
Это ошибка в книге или c 11 допускает такую инициализацию?
Комментарии:
1. Какое издание вы читаете? Я полагаю, он был обновлен для C 11 с 4-м изданием.
2. Я прочитал переведенную книгу (на русском языке). написано «Специальное издание» 2011 года.
Ответ №1:
Да, список инициализаторов по умолчанию поддерживался начиная с C 11.
(курсив мой)
Через инициализатор элемента по умолчанию, который представляет собой инициализатор в виде фигурных скобок или равен, включенный в объявление элемента и используемый, если элемент опущен из списка инициализаторов элемента конструктора.
Если элемент имеет инициализатор элемента по умолчанию, а также отображается в списке инициализации элемента в конструкторе, инициализатор элемента по умолчанию игнорируется для этого конструктора.
Вы также можете инициализировать его следующим образом
class ConstMembers
{
public:
...
const int c {3};
...
};
Ответ №2:
C 11 позволяет это. Ваша книга, должно быть, старая. Просмотр нестатических элементов данных