Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/23: Рейтинг темы: голосов - 23, средняя оценка - 4.52
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046

Размер типа

20.01.2014, 18:53. Показов 4364. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Такой небольшой занимательный код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
struct S1
{
};
 
struct S2
{
    int a[0];
};
 
int main() {
 
    std::cout << sizeof(S1) << std::endl;
    std::cout << sizeof(S2) << std::endl;
 
    return 0;
}
Сначала попробуйте догадаться какой будет вывод.

Кликните здесь для просмотра всего текста


Ну а потом, хотелось бы понять, почему так и зачем?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.01.2014, 18:53
Ответы с готовыми решениями:

Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур
Сабж. Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур или... пободного рода простых для восприятия...

Предельный размер списка типа vector
В программе возникает ошибка, которую не могу понять. Есть двухмерный массив данных std::vector&lt;std::vector&lt;int&gt; &gt;...

Какой приблизительно размер добавляемого компонента и влияет ли он на размер самой программы
Здравствуйте, меня интересует вопрос, когда создаешь какой нить компонент, какой приблизительно его размер и влияет ли он на размер самой...

8
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
20.01.2014, 20:00
Не понятно почему у S2 размер 0...

в GCC всякой фигни напихали

http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html(ссыль от 0x10)
Flexible array members have incomplete type, and so the sizeof operator may not be applied. As a quirk of the original implementation of zero-length arrays, sizeof evaluates to zero.
Добавлено через 43 секунды
-pedantic -pedantic-errors рулят
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
20.01.2014, 20:12
Я думаю все из-за того, что начало и конец массива, то бишь begin() и end() совпадают.
23.3.2.8 Zero sized arrays
1 array shall provide support for the special case N == 0.
2 In the case that N == 0, begin() == end() == unique value. The return value of data() is unspecified.
Добавлено через 4 минуты
Смотрим далее:
5.3.3 Sizeof
2 When applied to a reference or a reference type, the result is the size of the referenced type. When applied
to a class, the result is the number of bytes in an object of that class including any padding required for
placing objects of that type in an array.
The size of a most derived class shall be greater than zero (1.8).
The result of applying sizeof to a base class subobject is the size of the base class type. When applied
to an array, the result is the total number of bytes in the array. This implies that the size of an array of n
elements is n times the size of an element.
Добавлено через 2 минуты
Думаю насчет sizeof 1 структуры вопросов ни у кого не возникало?)
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
20.01.2014, 20:25
23.3.2.8 Zero sized arrays
э то ж глава про std::array

Думаю, достаточно этого:
8.3.4 Arrays
D1 [ constant-expressionopt ] attribute-specifier-seqopt
and the type of the identifier in the declaration T D1 is “derived-declarator-type-list T”, then the type of the identifier of D is an array type; if the type of the identifier of D contains the auto type-specifier, the program is ill-formed. T is called the array element type; this type shall not be a reference type, the (possibly cv-qualified) type void, a function type or an abstract class type. If the constant-expression (5.19) is present, it shall be an integral constant expression and its value shall be greater than zero.
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.01.2014, 21:23  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
If the constant-expression (5.19) is present, it shall be an integral constant expression and its value shall be greater than zero.
Очередное творение GNU стало быть.
Проверил в студии, получил:
1
1
и предупреждение:
warning C4200: nonstandard extension used : zero-sized array in struct/union
Цитата Сообщение от MrGluck Посмотреть сообщение
Я думаю все из-за того, что начало и конец массива, то бишь begin() и end() совпадают.
Но размер-то от объемлющей структуры берется, а не от самого массива.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
20.01.2014, 21:29
Цитата Сообщение от Tulosba Посмотреть сообщение
Но размер-то от объемлющей структуры берется, а не от самого массива.
просто тип считается не завершенным
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.01.2014, 21:36  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
просто тип считается не завершенным
Это откуда следует? Для незавершенного типа sizeof выполнить нельзя.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
20.01.2014, 21:46
Цитата Сообщение от Tulosba Посмотреть сообщение
Это откуда следует?
ссылка и цитата в посте #2
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.01.2014, 22:43  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
ссылка и цитата в посте #2
"Flexible array members" != "Zero-length arrays".
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.01.2014, 22:43
Помогаю со студенческими работами здесь

Автоматически изменять размер объектов Image под размер формы
Как сделать чтобы после запуска программы в C++ Builder можно было изменить размер формы, и размер объектов Image автоматически изменялся...

Изменять размер панели под размер причаливаемых окон
Имеется панель, которая выравнена относительно главного окна как alLeft. На панель причаливаются и отчаливаются другие окна фиксированного...

MediaPlayer: подстроить размер видео под размер панели
Привет всем, у меня возникла парочка вопросов по настройке компонента MediaPlayer: Во первых как сделать так чтоб видео подстроилось...

Преобразование строкового типа в переменную типа float
Как в программе С++ Builder6 преобразовать строковый тип числа взятого из компонента StringGrid1-&gt;Cells в переменную типа float, чтобы...

Аргумент типа const char* не совместим с параметром типа TCHAR*
Здравствуйте, появилась проблема с кодом, при наведении на: NtOpenProcess, NtClose, NtWriteVirtualMemory, NtProtectVirtualMemory...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru