Корректно или нет?

интересуюсь плюсами довольно давно... вообщем преамбулу отбросим,

нашёл баг еще в начале года в VS2017 (15.6.х) компилере (пофиксили буквально неделю назад в обнове 15.7.1)

баг в том что если есть например родительский класс с парой мемберов(неважно сколько и каких) и конструктором принимающим допустим 2 аргумента, то если с дочернего класса из constructor member initializer попытаться вызвать этот конструктор юниформно и не с 2мя аргументами а например с тремя, то есть derived() : base{1,2,3}{} то студийный компилер это спокойно хавал (в отличии от gcc и clang, и даже родного IntelliSense,который это место считал ошибочным), и на выходе получалось что базовый класс не проинициализирован а в дочернем всё ок. но это ладно, пофиксили и хорошо, просто

тут еще одна фантазия возникла:


#pragma pack(1)

struct _jGate

{

// due to initializers, added implicit ctor and called on creation

const unsigned char j_code = 0xEE;

unsigned int j_address;

const unsigned short int j_segment = 0x0033;

};

#pragma pack()


...

jGate stub{ 1}; // sets j_code member to 1, which is initially const.! Clang & gcc does same

// stub.j_code = 0xee; // error C3892: 'stub': you cannot assign to a variable that is const


тут вот вопрос, а вообще логично ли инициализировать константный мембер если у него уже в определении структуры есть инициализатор? (это  я вообще юниформной инициализаций заморочился)

(пс код и комменты писать по русски не могу - глаза режет)

Лига программистов C/C++

66 постов4.8K подписчиков

Правила сообщества

Соблюдайте правила Pikabu:

https://pikabu.ru/html.php?id=wtf


Помимо этого ЗАПРЕЩЕНО:

- Размещать в сообществе посты стиля "Подскажите как удалить вирус", "Подскажите как установить программу", "Подскажите как починить монитор/телевизор/мышь/тостер/стиральную машину" или "Напишите за меня лабу в универ". Пожалуйста размещайте такие посты вне этого сообщества или в соответствующих для этого сообществах.

Вы смотрите срез комментариев. Показать все
1
Автор поста оценил этот комментарий
а вообще логично ли инициализировать константный мембер если у него уже в определении структуры есть инициализатор?

А почему нет?
Вот такой код же работает:

```

struct Test {

const int value = 10;

Test(int value): value(value) {}

};

```

и по моему всё логично, инициализация полей происходит при создании объекта, а после поле константно

раскрыть ветку (6)
0
Автор поста оценил этот комментарий

а и еще, оказалось такое: в вашем примере уберите конструктор и добавьте пару еще таких мемберов с инициализаторами, и сделайте 2 экземпляра:

Test var1;

и Test var2{777};

у меня получилось что в первом создаётся неявный конструктор, и вызывается, т.е. не инлайн причём,  а во втором первый элемент инициализируется 777, остальные - как указано в структуре, т.е. какбудто инлайн.

раскрыть ветку (4)
0
Автор поста оценил этот комментарий

Что не так? В gcc всё логично https://ideone.com/qOjCHJ

раскрыть ветку (3)
0
Автор поста оценил этот комментарий

https://ideone.com/Okmsic вот. я просто со студийным заморочился с какого хрена в одном вставляется неявный конструктор а во втором нет. к жсс без вопросов - я именно такого результата и ожидал

раскрыть ветку (2)
1
DELETED
Автор поста оценил этот комментарий

стандартом про неявные конструкторы сказано тут http://en.cppreference.com/w/cpp/language/default_constructo...

> always declare a default constructor as an inline public member

ну а инлайнить или нет функцию как-то решает сам компилятор (если это не так - поправьте)
плюсом к моим словам дизасм трёх компиляторов https://godbolt.org/g/U8LTam

0
Автор поста оценил этот комментарий

ну да, по асм коду похоже, что дефолтный конструктор, проверить негде, винда далеко. Это конечно оч странно..

0
Автор поста оценил этот комментарий

да-да. распилил уже. просто тупняк наплыл внезапно. а пост видимо только что опубликовали

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества