powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Указатель на константу
21 сообщений из 21, страница 1 из 1
Указатель на константу
    #38856631
JackARoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.
Читаю про С++ и не понимаю вот чего:
Код: plaintext
1.
2.
3.
4.
int i = 123;
const int* pi = &i;
*pi = 456; // здесь ошибка компиляции - это понятно
i = 789;    // а здесь ошибки нет


Т.е. можно (ну, правда, не напрямую) изменить значение объекта.
Это из разряда "сделать можно, но никто никогда так не делает", "говнокод" и т.д.???
Или чего-то не догоняю?
...
Рейтинг: 0 / 0
Указатель на константу
    #38856634
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
const обычно используют для передачи указателей в параметрах, это указывает на то что вызываемая функция не изменит значения по указателю. Ну и компилятор контролирует чтобы это не произошло.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
void f(const int* x)
{
	printf("%d\n", *x);
	//*x = 25;
}

int main(int argc, char **argv)
{
	int x = 10;
	f(&x);
	return 0;
}


Раcкомментируй строку *x = 25; и не скомпилируется.
...
Рейтинг: 0 / 0
Указатель на константу
    #38856647
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JackARoeИли чего-то не догоняю?
Ты не догоняешь, что у тебя нет константы. У тебя есть обычная переменная и вполне
естественно, что её значение можно изменять. Объяви static const int i и почувствуй разницу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Указатель на константу
    #38856649
JackARoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вроде утряслось. это помогло
const обычно используют для передачи указателей в параметрах...
....
у тебя нет константы. У тебя есть обычная переменная
Дмитрии, спасибо
...
Рейтинг: 0 / 0
Указатель на константу
    #38856677
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
#define pi 123
...
Рейтинг: 0 / 0
Указатель на константу
    #38856684
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JackARoeТ.е. можно (ну, правда, не напрямую) изменить значение объекта.


У тебя объект i объявлен как

Код: plaintext
1.
int i;



почему же его нельзя менять ?

JackARoeЭто из разряда "сделать можно, но никто никогда так не делает", "говнокод" и т.д.???
Или чего-то не догоняю?

Нет, это из разряда "ты чего-то не догоняешь".
Через неконстантную ссылку и указатель объект менять можно.
Через константную ссылку и указатель -- нельзя.
Точнее надо говорить так: ссылка на константный объект, указатель на константный объект,
потому что ещё и указатель может быть сам константный.
...
Рейтинг: 0 / 0
Указатель на константу
    #38856692
JackARoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,
ага, осознал уже. и вам спасибо.
а вот глубину комментария mayton'а не осознал - это типа если мне нужно такое ничем неизменяемое значение, то определять его дефайном?
...
Рейтинг: 0 / 0
Указатель на константу
    #38856702
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это классика брат. Как раз для самых неизменяемых констант.
...
Рейтинг: 0 / 0
Указатель на константу
    #38856838
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JackARoeMasterZiv,
ага, осознал уже. и вам спасибо.
а вот глубину комментария mayton'а не осознал - это типа если мне нужно такое ничем неизменяемое значение, то определять его дефайном?

в общем это шутка такая.
...
Рейтинг: 0 / 0
Указатель на константу
    #38856859
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭто классика брат. Как раз для самых неизменяемых констант.С появлением ключевого слова const использовать директиву препроцессора define нужно осмысленно, а не потому, что "классика".
...
Рейтинг: 0 / 0
Указатель на константу
    #38856940
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivв общем это шутка такая.
Не, mayton просто заразился от самизнаетекого
...
Рейтинг: 0 / 0
Указатель на константу
    #38856983
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это диалектический спор на тему что было первым - курца или яйцо является константой.
...
Рейтинг: 0 / 0
Указатель на константу
    #38856997
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно то, что засунуто в define, считается литералом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Указатель на константу
    #38857012
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
общедоступная интернет-энциклопедия Литерал (англ. literal — константа) — запись в исходном коде компьютерной программы,
представляющая собой фиксированное значение. Литералами также называют
представление значения некоторого типа данных
...
Рейтинг: 0 / 0
Указатель на константу
    #38857040
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.

Dima Tconst обычно используют для передачи указателей в параметрах, это указывает на то что вызываемая функция не
изменит значения по указателю. Ну и компилятор контролирует чтобы это не произошло.


каким образом компилятор это контролирует ? Неужели перед каждой операцией присваивания, проверяет характеристики объекта по которому происходит попытка записи ?
...
Рейтинг: 0 / 0
Указатель на константу
    #38857045
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryкаким образом компилятор это контролирует ?При компиляции исходного текста.
При большом желании - может упихнуть всё константное на страницы "только для чтения".
...
Рейтинг: 0 / 0
Указатель на константу
    #38857048
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, это происходит во время компиляции, но как именно ? Или в каждом компиляторе по своему ?
И у меня есть такое чувство, что раньше ошибки такого рода отлавливались во время выполнения. Так ли это ?
...
Рейтинг: 0 / 0
Указатель на константу
    #38857059
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryДа, это происходит во время компиляции, но как именно ?Ну, например, константное значение не может оказаться слева от оператора присваивания или быть передано аргументом, если у прототипа функции нет модификатора const для этого аргумента. Всё это не требует поддержки времени выполнения.
...
Рейтинг: 0 / 0
Указатель на константу
    #38857164
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,
смутно понял. Спасибо :)
...
Рейтинг: 0 / 0
Указатель на константу
    #38857919
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryДа, это происходит во время компиляции, но как именно ? Или в каждом компиляторе по своему ?

Ну, в теории это одинаково во всех компиляторах: грамматика языка известна, строятся AST и если не получается составить корректное выражение - например, константное значение слева от оператора присваивания - то, фьюить, ошибка компиляции.
Как оно на практике реализовано в каждом компиляторе, знают только их разработчики.
...
Рейтинг: 0 / 0
Указатель на константу
    #38857920
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

и вообще, Драконья книга в помощь.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Указатель на константу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]