|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
|
||||||||||||||||||||||||||||||||||||
кое-что про const09.08.2012, 13:27. Показов 3426. Ответов 11
Метки нет (Все метки)
решил обновить свои знания про const
и везде вижу что const это константа инициализировать нужно при объявлении.....ну это мы и так знаем Не по теме: а еще такое "константная переменная" это типа "Небесная тверь" или "под сенью солнца" меня интересует когда она инициализируется на этапе компиляции или при исполнении вот так ведь правильно
и так правильно
а вот так уже неправильно ошибка компиляциии
и так первый вариант
![]() константе присваивается во время исполнения(строка 013816EB) а для массива во время компиляции ( 01381704 ) не зря я их недолюбливал
1
|
||||||||||||||||||||||||||||||||||||
| 09.08.2012, 13:27 | |
|
Ответы с готовыми решениями:
11
Ошибка: E2034 Cannot convert 'char const[51]' to 'const wchar_t * Ошибка E2034: Cannot convert 'char const[8]' to 'const wchar_t *' MessageBox - Cannot convert 'wchar_t const[45]' to 'const char *' |
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
|
|||
| 09.08.2012, 21:52 [ТС] | |||
|
Jupiter,
Спасибо что ответил Но какая к дьяволу оптимизация я что зря привел коды(VS 2008)(дебиг версия никакой оптимизации) переменной присваивается значение во время исполнения(второй пример) типа "константа определена стандартом" и нехрен выпендриваться на вопрос то в другом эта константа далеко не константа( с точки зрения машинного кода) но она же и константа (размер массива) попрошу компильнуть на других компиляторах и ассемблерный код скинуть
0
|
|||
|
|
||
| 09.08.2012, 23:02 | ||
Сообщение было отмечено как решение
Решение
Квалификатор const для переменной говорит о том, что в переменную нельзя делать присваивание (assignment). Когда ты пишешь объявление переменной и знак равно с константой, то это уже не присваивание, а инициализация (initialization).
C++ /* Это будет компилироваться, т.к. это инициализация */ const int a = 10; /* А это - не будет, т.к. это присваивание */ const int b; b = 10; В какой момент происходит запись значения при инициализации - тоже никакой роли не играет. Важно лишь то, что в момент первого обращения к переменной в неё уже было записано нужное значение. Для глобальных переменных и локальных с модификатором static значение, как правило, записывается на этапе загрузки программы (т.е. до запуска main). Для автоматических переменных - в runtime Добавлено через 3 минуты По поводу массива. Есть понятие expression (выражение) и constant expression (константное выражение, значение которого можно посчитать на этапе компиляции). В качестве размерности массива можно указывать только constant expression. Так вот если перменная с квалификатором const инициализирована constant expression'ом, то её можно использовать в других constant expression'ах, в противном случае нельзя Добавлено через 2 минуты Добавлено через 5 минут Да, основную мысль забыл сказать. Логика квалификатора const такова, что в момент рождения переменной она инициализируется некоторым значением, а во время всей своей дальнейшей жизни уже не будет менять своё значение. Вернее не "не будет", а "не должно". А если программист кривыми руками сумеет изменить значение, то он сам себе злобный буратино (то бишь undefined behaviour)
5
|
||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
|
||||||||||||||||||||
| 09.08.2012, 23:03 [ТС] | ||||||||||||||||||||
|
но сама переменная при runtime ![]() вопрос то как раз и в том что одна и та же константа себя по разному ведет в зависимости от контекста еще раз
а вот так ошибка
то все по другому делается но если ты посмотришь на код то разница то в одной строке ![]()
0
|
||||||||||||||||||||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
|
|||
| 09.08.2012, 23:16 [ТС] | |||
![]() я понимаю что ты хочешь мне сказать сам лет десять принимал на веру но тут решил попробовать и ![]() как видишь на уровне ассемблера очень легко поменять константу (правда какому идиоту это придет в голову я не знаю) почему то(может очень сложно)константы не записываются в память "только для чтения" и эта тема не вопрос "Я не знаю", а скорее "Почему так" видишь ведь стековой(автоматической) переменной присваивается значение во время исполнения а размеру во время компиляции. согласись нелогично ![]() вот почему я и просил скинуть ассемблерный код других компиляторов (может это VC слишком умный/глупый)
0
|
|||
|
|
|||||
| 10.08.2012, 00:01 | |||||
|
Добавлено через 53 секунды Добавлено через 1 минуту
1
|
|||||
|
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
||
| 10.08.2012, 08:45 | ||
|
0
|
||
|
|
||
| 10.08.2012, 08:52 | ||
|
http://gcc.gnu.org/onlinedocs/... ble-Length
1
|
||
|
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
||
| 10.08.2012, 12:39 | ||
|
говорят, что формально в c++ нет variable length arrays, однако чтобы gcc компилировал (точнее, не компилировал) в соответствии со стандартом, нужна опция -Werror=vla Аналогично себя ведет clang
0
|
||
|
|
|||
| 10.08.2012, 13:02 | |||
|
0
|
|||
| 10.08.2012, 13:02 | |
|
Помогаю со студенческими работами здесь
12
Пишу чит для кс.Кое что непонятно. Невозможно преобразовать параметр 1 из 'const char [3]' в 'const wchar_t * Добрый день, читал на хабре про АВЛ-деревья и хотелось бы кое-что уточнить
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
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
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|