Форум программистов, компьютерный форум CyberForum.ru

Преобразование в указатель на указатель на константу - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Avazart
 Аватар для Avazart
6903 / 5143 / 253
Регистрация: 10.12.2010
Сообщений: 22,616
Записей в блоге: 17
22.08.2012, 03:21     Преобразование в указатель на указатель на константу #1
В упор не могу понять правила которые приводит Дьюхерст для преобразований "многоуровневых" указателей.

(Дьюхерст "Скользкие места С++" Совет 32 "Преобразование в указатель на указатель на константу" стр 79)

Преобразование в указатель на указатель на константу
Преобразование в указатель на указатель на константу

Пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int ***const cnnn= 0;
 
int **const* ncnn= 0;
 
int *const** nncn= 0;
 
int *const*const* nccn= 0;
 
const int *** nnnc= 0;
 
ncnn = cnnn;
 
nncn = cnnn; /* Ошибка ! */
 
nccn = cnnn;
 
nnnc = cnnn; /* Ошибка ! */
Есть литература на эту тему с более лучшим качеством изложения ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2012, 03:21     Преобразование в указатель на указатель на константу
Посмотрите здесь:

C++ Функция принимает указатель на void и возвращает указатель на int
Указатель на строковую константу C++
Указатель на строковую константу. В чем отличие двух приведенных примеров C++
Приведение любого двумерного массива к типу указатель на указатель C++
Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
22.08.2012, 09:54
  #2

Не по теме:

снимаю шляпу - таких фокусов с const я никогда в жизни не видел. максимум - const перед типом или const перед именем. может такие фокусы и не нужны)? даже не знаю, что посоветовать в плане осознания написанного. слежу с интересом.

Avazart
 Аватар для Avazart
6903 / 5143 / 253
Регистрация: 10.12.2010
Сообщений: 22,616
Записей в блоге: 17
22.08.2012, 17:09  [ТС]     Преобразование в указатель на указатель на константу #3
Цитата Сообщение от vxg Посмотреть сообщение
может такие фокусы и не нужны)?
Дальше в книге Дьюхерст пишит что необходимость применения возникает довольно часто и приводит пример
nexen
22.08.2012, 17:27
  #4

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение

Дальше в книге Дьюхерст пишит что необходимость применения возникает довольно часто и приводит пример
Можешь выложить примеры? Я бы на это посмотрел :>

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
22.08.2012, 18:24     Преобразование в указатель на указатель на константу #5
Avazart, Да нет как раз требуется это редко, т.к. в основном пользуются векторами/строками. А если нужна быстрота - то это повод смотреть в сторону Си
Avazart
 Аватар для Avazart
6903 / 5143 / 253
Регистрация: 10.12.2010
Сообщений: 22,616
Записей в блоге: 17
22.08.2012, 18:26  [ТС]     Преобразование в указатель на указатель на константу #6
Avazart, Да нет как раз требуется это редко, т.к. в основном пользуются векторами/строками. А если нужна быстрота - то это повод смотреть в сторону Си
Ну так ничто не мешает совмещать код... в этом и плюсы...

И все же как объяснить подобные преобразования ?
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
22.08.2012, 18:40     Преобразование в указатель на указатель на константу #7
Avazart,

Не по теме:

это черная магия. Просто прийми это как есть)

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
22.08.2012, 18:44     Преобразование в указатель на указатель на константу #8
Avazart, Так как написано в книге. Ни у Саттера, ни у Страуструпа, ни у Александреску, ни у Мейерса я таких примеров не встречал. Потому либо лезть копаться в стандарте, либо принять как написано здесь
Avazart
 Аватар для Avazart
6903 / 5143 / 253
Регистрация: 10.12.2010
Сообщений: 22,616
Записей в блоге: 17
22.08.2012, 18:46  [ТС]     Преобразование в указатель на указатель на константу #9
Да наверное придется лезть в стандарт...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2012, 07:20     Преобразование в указатель на указатель на константу
Еще ссылки по теме:

Расскажите, как здесь работает указатель на указатель? C++
C++ Указатель на строковую константу
C++ Как правильно удалять выделенную память под указатель на указатель?

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6903 / 5143 / 253
Регистрация: 10.12.2010
Сообщений: 22,616
Записей в блоге: 17
24.08.2012, 07:20  [ТС]     Преобразование в указатель на указатель на константу #10
В стандарте таже фигня:
Цитата Сообщение от Standard for Programming Language C++, 4.4 Qualification conversions
where each cvi,j is const, volatile, const volatile, or nothing. The n-tuple of cv-qualifiers after the
first in a pointer type, e.g., cv1,1, cv1,2, · · · , cv1,n in the pointer type T1, is called the cv-qualification
signature of the pointer type. An expression of type T1 can be converted to type T2 if and only if the
following conditions are satisfied:

— the pointer types are similar.
— for every j > 0, if const is in cv1,j then const is in cv2,j , and similarly for volatile.
— if the cv1,j and cv2,j are different, then const is in every cv2,k for 0 < k < j.
Условие
— if the cv1,j and cv2,j are different, then const is in every cv2,k for 0 < k < j.
Вообще не понятно....
Yandex
Объявления
24.08.2012, 07:20     Преобразование в указатель на указатель на константу
Ответ Создать тему
Опции темы

Текущее время: 21:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru