![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
вот решил понять получше, что есть указатели на функции
в связи с этим несколько вопросов появилось (скорее всего детских): пусть есть:
1. Наивный вопрос, но хочется уточнить. НИКАК нельзя в стандартном C++ сделать прямую зависимость между типом Func и func, как функцией этого типа? 2. что представляет собой выражение *func? 3. почему нет разницы между func и &func? Или есть? 4. если передавать в функцию указатель на другую функцию, то какой-то шутник (или просто невнимательный человек) может передать туда 0. Потому приходится все время проверять на 0 перед вызовом по указателю. Есть ли для функций механизм, похожий на ссылочный, который "гарантирует", что передается непустое значение? |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Литературку читать не пробовал и поиском пользоваться?
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
да, может есть у кого на примете статья, где рассматривается подноготная указателей на функции?
к примеру, интересует, 5. всегда ли компилятор может оптимизировать вот такое:
Добавлено через 2 минуты и 3 секунды в детстве Незнайку читал пытался найти ответ на первый вопрос, но не смог - даже составить текст запроса на поиск. Если даш "литературку", где ответы на эти вопросы написаны, буду благодарен |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
ты уверен, что там есть ответы на эти вопросы?
(второй, заметь - это ПОЧЕМУ. В литературке такие подробности редко пишут) Добавлено через 10 минут и 6 секунд хоть когда-то и читал, но все же поглядел на главу "4.6.9 Указатель на функцию" из рекомендованной "литературки" негусто ни на 1 из вопросов ответа не нашел (хотя дошло, что 2 и 3 взаимосвязанны) может у кого есть "литературка", где это поглубже рассматривается? |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
а чем
не устраивает? -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Alek86, недавно прочёл вот эту статью : Member Function Pointers and the Fastest Possible C++ Delegates. Весьма и весьма профессиональный рассказ. Не то чтобы я узнал много нового, но все мои разрозненные знания как бы сложились в общую картину
Это сообщение отредактировал(а) marcusmae - 26.2.2008, 12:09 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
устраивает проблема в том, что я чёто был уверен, что сцылок на функции нету (даже не проверил)... угу, с моим другом-словарем... спасибо, посмотрим-с |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Строго говоря, замена указателя ссылкой не спасет от "шутников". Ибо здесь вам C. Например, разыменуем нулевой указатель и передадим. Все прекрасно скомпилируется. Естественно, получишь в runtime исключение, как и при вызове функции по нулевому указателю, только несколько другое.
То же самое относится и к ссылкам на данные. Ссылка лишь декларирует соглашение - объект должен быть - но никто не мешает нарушать его при желании. Тем не менее функции принято передавать по указателю, а не по ссылке - просто тебя лохо поймут. -------------------- ... |
|||
|
||||
| Alek86 |
|
||||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
у слова "гарантирует", наверное, не заметила кавычек все равно, что объвление функции константной "гарантирует", что она не будет менять объект а инкапсуляция "гарантирует" неприкосновенность приватных переменных но за труды в написании спасибо в смысле плохо? в том, что не только я не знал, что такое ссылка на функцию? ну увидят и просветятся... лучши скажи, как передать в функтор
функцию так, чтобы нормальный оптимизатор вызов
соптимизировал так, чтобы он был аналогичен вызову
MVC 2005 при использовании ссылок оптимизирует их одинаково только если func() не может быть встраиваемой. иначе же:
:( PS. marcusmae, если это есть в той статье, то я ее еще не читал - работа... |
||||||||||
|
|||||||||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
существует ли возможность обьявить ссылку на функцию-член класса?
пробовал - не получилось. в стандарте тоже не нашел |
|||
|
||||
| marcusmae |
|
||||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
А ещё моя тема здесь на форуме : Передать в класс указатель на функцию, если функция - член другого класса Это сообщение отредактировал(а) marcusmae - 27.2.2008, 14:10 -------------------- ἀπὸ μηχανῆς θεός |
||||||
|
|||||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
ключевое слово - "ссылку"
статейку я прочел, и даже + зарядил за нее кстати, русский вариант |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Ого! Ага, я внимательно читаю. Загляни в тему, которую я привёл. В кратце, должно быть что-то вроде
То есть, завести амперсанд не выйдет, а вот взять адрес указателя - вполне -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
угу... а жаль... правда ведь если спрошу, почему нету ссылки, то не уверен, что найдется ответ... я во время компиляции передаю в качестве параметра шаблона... не подходит конечно, проблема решаемая (принимать указатель, и во время компиляции гавкать, если туда 0 записали) но все же... на обычные функции есть, а на члены - нету :( |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |