5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
||||||
1 | ||||||
Ссылка на указатель на константу01.10.2016, 22:13. Показов 3170. Ответов 16
Метки нет (Все метки)
Добрый вечер!
Не подскажите почему только выражение с pi_ref3 верное, а остальные - нет (VS 2013). Выражение с pi_ref1 вроде как-то логичнее для того, чтобы претендовать на верность. Тем не менее компилятор принимает только с pi_ref3:
0
|
01.10.2016, 22:13 | |
Ответы с готовыми решениями:
16
Ссылка на указатель на константу Константный указатель или указатель на константу? Преобразование в указатель на указатель на константу Указатель на строковую константу |
01.10.2016, 22:18 | 2 |
Потому что ival это целочисленная константа, а pi_ref3 указатель на целочисленную константу
Добавлено через 41 секунду Юрий Ч, 2 вариант это КОНСТАНТНЫЙ УКАЗАТЕЛЬ на просто int Добавлено через 17 секунд 1 вариант просто указатель на int
0
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
||||||
01.10.2016, 22:32 [ТС] | 3 | |||||
Peoples, Хочу сказать, что всё-таки pi_ref0 - pi_ref3 - это не указатели, а ссылки на указатели. Но мне всё-таки не ясно, почему конструкция:
0
|
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
|
|||||||||||
01.10.2016, 23:03 | 4 | ||||||||||
Потому что выражение
&ival порождает rvalue (в данном случае временный объект, типа "указатель на константу"), а (rvalue) временные объекты нельзя привязывать к lvalue ссылкам.Можно использовать rvalue ссылку так:
3
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
||||||
02.10.2016, 00:12 [ТС] | 5 | |||||
DrOffset, Можно ещё вопрос.
0
|
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
02.10.2016, 00:25 | 7 |
0
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
|||||||||||
02.10.2016, 00:31 [ТС] | 8 | ||||||||||
Так, в общем,
0
|
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
|
|
02.10.2016, 00:35 | 9 |
Да.
Но этот указатель - временный. Значит к обычной ссылке не привяжется. Я же уже написал об этом выше.
0
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
|||||||||||||||||||||
02.10.2016, 00:45 [ТС] | 10 | ||||||||||||||||||||
DrOffset, Однако в книге Стенли Липпмана дана другая интерпретация, почему компилятор ругается на эти конструкции, а именно, цитирую:
Вот еще один пример ссылки, который трудно понять с первого раза. Мы хотим определить ссылку на адрес константного объекта, но наш первый вариант вызывает ошибку компиляции:
0
|
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
|
||||||
02.10.2016, 00:51 | 12 | |||||
Если там именно так и написано, то это конечно же ошибка.
Я могу допустить, что Липпман намеренно пока что не вдается в тонкости, но вот эта запись
0
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
|
02.10.2016, 00:52 [ТС] | 13 |
nd2, Так кому верить? Книгу Липпмана считают чуть ли не библией для начинающего изучать С++, но при этом у него с первых страниц книги такие "опечатки". Перевёрнуто всё с ног на голову.
0
|
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
|
|
02.10.2016, 00:57 | 15 |
Верить надо стандарту С++. (Да и то не всегда, там ведь тоже бывают ошибки, достаточно взглянуть на список defect reports).
Пока что лучше вот это почитать, чтобы усвоить тему: https://msdn.microsoft.com/ru-... 831hc.aspx
0
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
|
02.10.2016, 00:58 [ТС] | 16 |
DrOffset,
УДК 681.3.06 ББК 32.973.26-018.1 Л61 Липпман С - Язык программирования С++. Полное руководство. 3-е издание. Страница 118.
0
|
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
|
|
02.10.2016, 01:27 | 17 |
Сообщение было отмечено hoggy как решение
Решение
Это издание очень старое.
Можно взять того же Липпмана, но поновее. Есть 5 издание, она и полнее и переведена, по-моему лучше. В общем, посмотрел я этот раздел. Там выше он пишет о том же самом, о чем и я, о временных объектах и о невозможности привязать их к неконстантной lvalue-ссылке.
Сообщение от Из книги Липпмана
Сообщение от Из книги Липпмана
В итоге я забрался в оригинал, и вот что я там увидел: const . Еще раз русская фраза, рядом с английскойДобавлено через 4 минуты Так что все, о чем я выше написал, полностью совпадает с оригинальным Липпманом (за исключением rvalue-ссылок (&&), которых на момент написания книги просто не было в языке). Добавлено через 2 минуты Я даже сейчас склоняюсь к мысли, что переводчик не только не понял мысль автора, но и, решив, что он умнее, специально убрал первый const (исходя из неправильно понятного предложения), видимо подумал, что это в оригинальном тексте опечатка
1
|
02.10.2016, 01:27 | |
02.10.2016, 01:27 | |
Помогаю со студенческими работами здесь
17
Указатель на строковую константу Ссылка на константу Инициализация ссылка на константу Константный указатель на константу меняет значение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |