|
12 / 12 / 2
Регистрация: 05.06.2016
Сообщений: 248
|
||||||
Область видимости класса для массива25.12.2017, 03:12. Показов 1590. Ответов 9
Метки нет (Все метки)
Не пойму, почему в данном примере (и вообще) нельзя использовать переменную "n" для создания массива "x"? Для всех остальных случаев в классе ведь не мешает то того что "n" объявлена ниже его использования, не вижу разницы.
0
|
||||||
| 25.12.2017, 03:12 | |
|
Ответы с готовыми решениями:
9
область видимости класса Область видимости переменной пользовательского класса Область видимости и время жизни переменных внутри класса |
|
|
|
| 25.12.2017, 04:38 | |
|
круть! не знал
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 25.12.2017, 09:55 | ||
|
1) Стандарт пишут ленивые задницы, которые никак не перетащат из Си flexible array member и variable lenght array. Поэтому, строго говоря задавать размер массива переменной вообще нельзя. А если вдруг можно, то это частное расширение компилятора (хотя, популярные gcc и Студия его поддерживают). 2) Даже если и перетащат, чтобы запихнуть VLA внутрь структуры, его придется инициализировать в конструкторе. А конструкторов то в Си и нету. Поэтому, никаких VLA, только flexible array member, только хардкор. 3) flexible array member - int x[]. Да, именно так, с пустым размером и строго в конце структуры.
0
|
||
|
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 732
|
|
| 25.12.2017, 10:35 | |
|
Не знаю как там что выделяется,но, в принципе, для использования n в выражениях не нужно знать значение при компиляции - только тип, а вот для выделения памяти под массив нужно знать значение, так что логика есть.
0
|
|
|
12 / 12 / 2
Регистрация: 05.06.2016
Сообщений: 248
|
|
| 25.12.2017, 13:19 [ТС] | |
|
Renji, я про константу имел ввиду, у меня обычный массив с константным количеством элементов, а не flexible array member и variable lenght array, почему массивы я должен создавать в конце структуры? Почему они не видят объявления обяъвленные ниже них?
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 25.12.2017, 13:23 | ||
|
Тела же методов компилируются так, как если бы вы эти тела описали после объявления класса. Соответственно, им пофиг в какой последовательности константы объявлены.
0
|
||
|
12 / 12 / 2
Регистрация: 05.06.2016
Сообщений: 248
|
||
| 25.12.2017, 15:44 [ТС] | ||
|
Renji,
0
|
||
|
|
||
| 25.12.2017, 18:59 | ||
|
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 25.12.2017, 21:11 | ||
|
Память под VLA массивы выделяется из стека, то есть практически мгновенно. И VLA расходует стек экономней чем "а ты выдели буффер на десять тысяч элементов и используй потом первые десять". Затем оно и нужно.
0
|
||
|
Комп_Оратор)
|
||||||
| 25.12.2017, 23:24 | ||||||
|
nammidd, я думаю, что причина в том, что статические константы в классе могут создаваться позже чем сами классы/типы. Вот пример с простым шаблоном использующим константу. Он тоже не создаётся если нет объявления в области видимости. Я не имею ввиду область класса в общем случае. Классы создаются раньше функций и компилятор может требовать полной определённости для создания типа. Иначе созданный тип может быть использован там где ожидается определение (ниже - как Вы ожидаете) и получится циклическая зависимость или попросту неопределённость.
int a[] это не тип, а int a[3] и int b[4] это типы. Причём два разных типа. Они являются инстансами шаблона массива на типе int с размерами 3 и 4 соответственно. То есть, нельзя создавать типы откладывая такие вопросы как размер (и др.).
0
|
||||||
| 25.12.2017, 23:24 | |
|
Помогаю со студенческими работами здесь
10
Область видимости переменной. 3 цикла. Выводим содержимое массива Обнуление переменных класса - это область видимости?
Область видимости класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|