Инициализация постоянного члена

#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 
 

я не получил сообщение об ошибке.

экран clion

Это ошибка в книге или c 11 допускает такую инициализацию?

Комментарии:

1. Какое издание вы читаете? Я полагаю, он был обновлен для C 11 с 4-м изданием.

2. Я прочитал переведенную книгу (на русском языке). написано «Специальное издание» 2011 года.

Ответ №1:

Да, список инициализаторов по умолчанию поддерживался начиная с C 11.

(курсив мой)

Через инициализатор элемента по умолчанию, который представляет собой инициализатор в виде фигурных скобок или равен, включенный в объявление элемента и используемый, если элемент опущен из списка инициализаторов элемента конструктора.

Если элемент имеет инициализатор элемента по умолчанию, а также отображается в списке инициализации элемента в конструкторе, инициализатор элемента по умолчанию игнорируется для этого конструктора.

Вы также можете инициализировать его следующим образом

 class ConstMembers
{
public:
    ...
    const int c {3};
    ...
};
 

Ответ №2:

C 11 позволяет это. Ваша книга, должно быть, старая. Просмотр нестатических элементов данных