Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 521
1

Массив констант C++

13.10.2022, 07:24. Показов 1266. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Лыжи не едут. Никак не могу понять. почему не работает массив констант.

C++
1
2
3
4
5
6
7
8
9
10
//размер квадратного поля
const int size_sq = 50;
 
const int neiro[5] = {0, size_sq * size_sq, 2, 1000, 2};
 
//определение массива для первого слоя
int input_data[neiro[1]];
 
//определение двумерного второго слоя
int m2[neiro[1]][neiro[2]];
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.10.2022, 07:24
Ответы с готовыми решениями:

Сделать массив констант, содержащий символы от '0' до '9' и от 'A' до 'Z'
Как в С++ сделать массив констант, содержащий символы от 0 до 9 и от A до Z

Ввод данных в массив с помощью типизированных констант
Каким образом можно ввести данные в массив с помощью типизированных констант ? Добавлено через 12 минут Собственно само задание

Определение констант
Добрый день! Имеется заголовочный файл Some.h, в котором объявлен класс Some, и соответствующий файл реализации Some.cpp. ...

3
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12856 / 6722 / 1806
Регистрация: 18.10.2014
Сообщений: 17,020
13.10.2022, 07:39 2
Лучший ответ Сообщение было отмечено SergeyKagen как решение

Решение

Цитата Сообщение от SergeyKagen Посмотреть сообщение
почему не работает массив констант.
Что такое "не работает"? О чем речь?

Цитата Сообщение от SergeyKagen Посмотреть сообщение
int input_data[neiro[1]];
Так нельзя. neiro[1] не является целочисленным константным выражением.

Однако если сделать

C++
1
constexpr int neiro[5] = {0, size_sq * size_sq, 2, 1000, 2};
то будет являться.
2
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 521
13.10.2022, 07:43  [ТС] 3
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
то будет являться.
в чем разница тогда между

const int
и
constexpr int

???

я думал const int - это уже объявление константы.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12856 / 6722 / 1806
Регистрация: 18.10.2014
Сообщений: 17,020
13.10.2022, 07:58 4
Лучший ответ Сообщение было отмечено SergeyKagen как решение

Решение

Цитата Сообщение от SergeyKagen Посмотреть сообщение
я думал const int - это уже объявление константы.
Что значит "константы"? Размер массива в С++ должен быть ingegral constant expression, то есть константой времени компиляции. А const-объект в С++ не обязан являться "константой времени компиляции". Например

C++
1
const int a = std::rand();
Это по-вашему "константа" или нет? Это корректное объявление const-объекта, но как вы сами понимаете, константой времени компиляции он не является.

В дополнение к этому константами времени компиляции в С++ могут являться только скалярные const-объекты. "Сложные" const-объекты в С++ никогда не являются константами времени компиляции. Массив считается сложным объектом, поэтому ваш исходный вариант некорректен.

Другое дело - constexpr. Тут вступают в дело совсем другое правила, требования и ограничения. И вообще, если вам нужна именно константа времени компиляции, то забудьте о const и всегда пользуйтесь constexpr даже для скаляров.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.10.2022, 07:58
Помогаю со студенческими работами здесь

Устройство констант
Товарищи, такой вопросик. Можно ли как-нибудь задать константу не на прямую. То есть например: int num; // Есть массив например....

Память у констант
В данном примере, мы получаем указатель на объект который создан в стеке, почему мы можем получать к нему доступ по указателю? Разве память...

Устройство констант
Товарищи, такой вопросик. Можно ли как-нибудь задать константу не на прямую. То есть например: int num; // Есть массив например....

Использование констант из limits.h
непонятная для моего уровня программирования задачка:( №2 #include <stdlib.h> #include <stdio.h> #include <limits.h> ...

Опережающее определение констант
Есть класс Test, содержащий поле value являющееся указателем на Test. Есть два константных объекта Test - t1 и t2. Указатель в t1 должен...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Что нового в C# 14
UnmanagedCoder 10.03.2025
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной. Что стоит отметить, так это влияние сообщества разработчиков на формирование новых. . .
Формулы поворота
Igor3D 10.03.2025
Добрый день Тема Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости". x' = x * cos(a) - y * sin(a) y' = y * cos(a) + x * sin(a) Как бы Вы их. . .
Что нового в .NET 10
UnmanagedCoder 10.03.2025
. NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация. . .
Отложенное высвобождение, RCU и Hazard Pointer в C++26
NullReferenced 09.03.2025
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и. . .
Неблокирующийся стек на C++26
NullReferenced 09.03.2025
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся. . .
Обработка строк в C++26: Новые возможности string и string_view
NullReferenced 09.03.2025
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view. string_view - это невладеющая ссылка на последовательность символов, появившаяся в. . .
Мой первый аддон для Blender 3D, с помощью нейронки (не зная даже азов пайтона, но это не значит что так и с остальным).
Hrethgir 09.03.2025
Потратил весь день. Пол-дня мне хватило, чтобы понять что с версией с 14B мне не одолеть написание функционального кода, на языке с которым я вообще никак не знаком - пайтон. Версия 22B от другого. . .
Einstein@Home сегодня исполняется двадцать лет!
Programma_Boinc 09.03.2025
Einstein@Home сегодня исполняется двадцать лет! Отправлено 19 февраля 2025 года в 17:20:21 UTC Я хочу поздравить всех наших волонтеров, разработчиков и ученых из Einstein@Home. Мы официально. . .
Заполнители и расширенный набор символов в C++26
NullReferenced 09.03.2025
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они. . .
Контракты в C++26
NullReferenced 09.03.2025
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru