The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск набора компиляторов GCC 7.2, opennews (??), 15-Авг-17, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


40. "Выпуск набора компиляторов GCC 7.2"  +1 +/
Сообщение от Аноним84701 (ok), 15-Авг-17, 16:17 
> Наткнулся на такую засадку небольшую в ГЦЦ:
> Не считает поле "int" в "const union" за "const int".
> Из-за этого такое поле нельзя вставить в switch/case...
> Мелочь, а неприятно.
> Вот например такой код не компилится.
> http://rextester.com/EOQCD80556
> Со мной всё в порядке?

Все правильно:
www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
> 6.8,4,2
> The expression of each case label shall be an integer constant expression and no two of the case constant expressions in the same switch >statement shall have the same value after conversion.

constant expr != const foo

Ответить | Правка | К родителю #36 | Наверх | Cообщить модератору

41. "Выпуск набора компиляторов GCC 7.2"  –1 +/
Сообщение от pripolz (?), 15-Авг-17, 16:38 
Приведённая цитата из стандарта не о том. Переводится как "в case должен быть const int, и не допускается два одинаковых const int".

Вот смотрите. Есть константный union. Помеченный как const, и инициализированный как const. Который прописывается в секцию данных.

Логично, что все его поля тоже const.

Но если пытаться инициализировать его полем константу - компилятор ругается..
И та же ситуация с const struct.

Ответить | Правка | Наверх | Cообщить модератору

43. "Выпуск набора компиляторов GCC 7.2"  +1 +/
Сообщение от Аноним84701 (ok), 15-Авг-17, 16:48 
>> integer constant expression
> Приведённая цитата из стандарта не о том. Переводится как "в case должен
> быть const int, и не допускается два одинаковых const int".

Вы серьезно или издеваетесь? o_O

> Вот смотрите. Есть константный union. Помеченный как const, и инициализированный как const.
> Который прописывается в секцию данных.

Еще раз: сonst var = только на чтение, но значение может быть присвоенно в рантайм
сonstant expr = компайлтайм вычисляемое выражение.

Ответить | Правка | Наверх | Cообщить модератору

44. "Выпуск набора компиляторов GCC 7.2"  –1 +/
Сообщение от pripolz (?), 15-Авг-17, 17:01 
И что в данной ситуации пошло так?
Почему const union считается constexpr?

Кстати, если заменить union на struct - тогда ситуация переменная в зависимости от версии компилятора.

Ответить | Правка | Наверх | Cообщить модератору

45. "Выпуск набора компиляторов GCC 7.2"  +1 +/
Сообщение от dq0s4y71 (ok), 15-Авг-17, 18:07 
> Приведённая цитата из стандарта не о том. Переводится как "в case должен быть const int, и не допускается два одинаковых const int".

О том. Вы почитайте теперь, что, с точки зрения стандарта, есть const int:

"An integer constant expression99) shall have integer type and shall only have operands that are integer constants, enumeration constants, character constants, sizeof expressions whose results are integer constants, and floating constants that are the immediate operands of casts. Cast operators in an integer constant expression shall only convert arithmetic types to integer types, except as part of an operand to the sizeof operator".

Ответить | Правка | К родителю #41 | Наверх | Cообщить модератору

53. "Выпуск набора компиляторов GCC 7.2"  +/
Сообщение от pripolz (?), 16-Авг-17, 18:05 
> Вы почитайте теперь, что, с точки зрения стандарта, есть const int

Да, всё именно так, спасибо.

Ответить | Правка | Наверх | Cообщить модератору

42. "Выпуск набора компиляторов GCC 7.2"  –2 +/
Сообщение от pripolz (?), 15-Авг-17, 16:45 
Раскомментируйте "case z":

https://godbolt.org/g/CAvAzb

Ответить | Правка | К родителю #40 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру