Указатель на ссылку? |
Здравствуйте, гость ( Вход | Регистрация )
Указатель на ссылку? |
Litkevich Yuriy |
12.2.2010, 0:51
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Наткнулся на такую запись:
sqlda - это что указатель на ссылку?
|
|
|
BRE |
12.2.2010, 8:30
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Наткнулся на такую запись: sqlda - это что указатель на ссылку?Наоборот. Указателей на ссылку быть не может. Эквивалентна следующей записи:
Только в эту функцию можно передать 0, если же использовать ссылку, то параметр должен быть указателем на объект:
Сообщение отредактировал BRE - 12.2.2010, 9:14 |
|
|
Iron Bug |
12.2.2010, 18:42
Сообщение
#3
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
я думаю, что это простой аналог выражения **.
выражение TypeX *&X означает, что &X является выражением типа TypeX*, то есть, указателем на тип TypeX. а ссылка - просто переименование объекта X. таким образом, операнд X является указателем на TypeX. новый объект сам по себе не создаётся, ноль там или не ноль - безразлично. функция внутри должна проверять значение операнда и может его менять по своему усмотрению. вот пример тестового кода - ради интереса:
пример вывода программы:
указатели px и x эквивалентны. ничего не создаётся. если будет ноль - он останется нулём. но, понятное дело, есть возможность изменить его значение внутри функции и тогда элемент по ссылке px уже будет содержать другое значение. Сообщение отредактировал Iron Bug - 12.2.2010, 18:44 |
|
|
BRE |
12.2.2010, 18:55
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
я думаю, что это простой аналог выражения **. Вроде я это и написал. Только ссылка на указатель является безопасной, потому что по ней нельзя передать что угодно, а только указатель на конкретный тип. новый объект сам по себе не создаётся, ноль там или не ноль - безразлично. функция внутри должна проверять значение операнда и может его менять по своему усмотрению. Я нигде не писал про создания новых объектов. Попробуй скомпилировать свой пример:
|
|
|
Iron Bug |
12.2.2010, 19:45
Сообщение
#5
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
значит, просто я твоё изложение не поняла.
однако, вся эта шелуха имеет смысл лишь на этапе компиляции. оптимизации она не несёт никакой - ведь передаваться будет всё равно значение указателя, а это просто "защита от дурака", так сказать: ведь наверняка перед применением функции надо посмотреть документацию или сорц хотя, может быть, кому-то и такая защита полезна. а то сейчас мне многие говорят, что Си "небезопасен". имхо, это такие программисты небезопасны, а не Си Сообщение отредактировал Iron Bug - 12.2.2010, 19:46 |
|
|
BRE |
12.2.2010, 19:59
Сообщение
#6
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
значит, просто я твоё изложение не поняла. однако, вся эта шелуха имеет смысл лишь на этапе компиляции. оптимизации она не несёт никакой - ведь передаваться будет всё равно значение указателя, а это просто "защита от дурака", Ну ссылки и были придуманы для обеспечения дополнительной безопасности, что бы ошибки можно было ловить на этапе компиляции, а не исполнения. |
|
|
Litkevich Yuriy |
12.2.2010, 20:12
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Собственно код функции вот:
это файл %QTDIR%/src/sql/drivers/ibase/qsql_ibase.cpp(Qt 4.6.0) |
|
|
Гость_Гость_* |
28.9.2010, 20:09
Сообщение
#8
|
Гости |
Цитата sqlda - это что указатель на ссылку? sqlda это ссылка на указатель, этот участок кода означает что значение указателя, т.е адресс на который он указывает может быть изменено т.к не указанн модификатор const т.е
|
|
|
Алексей1153 |
28.9.2010, 21:44
Сообщение
#9
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
XSQLDA *&sqlda мне лично больше нравится, когда символы * и & визуально прилеплены к типу (поскольку они тоже определяют тип) , хотя и это невозможно при записи вида
а чем нравится ? А тем, что сразу видно назначение: тип слева, идентификатор справа: //тип идентификатор переменной XSQLDA*& sqlda; дальше (хоть и звучит всё банально, зато работает железно): тип "XSQLDA*&" - это ссылка на тип "XSQLDA*", который - указатель на тип "XSQLDA"
Сообщение отредактировал Алексей1153 - 28.9.2010, 21:45 |
|
|
Litkevich Yuriy |
28.9.2010, 22:19
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
по-моему уже давно разобрались
|
|
|
Текстовая версия | Сейчас: 3.1.2025, 13:04 |