![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| drug007 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
Всем здравствуйте.
Не уверен, что не флуд, но задам вопрос. Наткнулся случайно на объявление о приеме на работу программиста С++ "для разработки критически важного компонента системы" с уверенным знанием С++ и контрольным вопросом - чем указатель отличается от ссылки. В коллективе возникло два мнения - 1) что это базовое требование для программиста С++ знать эти вещи и 2)что на самом деле в этом вопросе есть множество подводных камней и все не так просто, поэтому такой вопрос разработчику критически важного компонента уместен. Вот у меня вопрос - действительно ли есть эти самые подводные камни, что только опытные разработчики критически важных компонентов и владеют ими или все-таки это просто показывает уровень разработки в отдельно взятой организации? |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
| drug007 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
xvr, спасибо! Ваше мнение значит для меня)) А то я уже начал думать, что упустил что-то важное.
|
|||
|
||||
| jsharp36 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 8.10.2011 Репутация: нет Всего: 1 |
А где контрольный вопрос? В описании вакансии? Это было бы странно.
А вообще может быть несколько вариантов. 1. Глупый текст вакансии могут составлять hr, ничего в этом не понимающие. 2. Если это первые тесты, то они делаются не для определения уровня знаний, а для отсеивания неадекватов. Хороших программистов мало, зато на вакансию откликнется немалое число странных людей. И вот чтобы только допустить до собеседования, желательно их как-то фильтровать. Но вполне может быть и слабый уровень разработки, если все таки раньше неадекваты прорвали линию обороны и устроились там работать, а нормальных нет ) Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
Конечно, есть! Как будто в C++ есть хоть какой-нибудь момент, в котором не было бы подводных камней. |
|||
|
||||
| drug007 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
В том-то и дело, что прямо в вакансии. Как если бы это был критически важный момент.
Это я согласен. На 200%. Почему и спросил на форуме. Но в чем подводный камень заключается? При этом из вакансии складывается впечатление, что для того, чтобы избежать этих подводных камней достаточно знать чем ссылка отличается от указателя. Тут либо действительно вопрос с большой заковыркой, либо, простите, глупый вопрос. И если первое, то хотелось бы знать этот подвох. |
||||
|
|||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Есть тонкости. Хотя бы.
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| _zorn_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1076 Регистрация: 21.8.2007 Репутация: 1 Всего: 12 |
Чему равно
i = i++ + ++i; |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
_zorn_, во-первых, не так, а так:
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| _zorn_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1076 Регистрация: 21.8.2007 Репутация: 1 Всего: 12 |
||||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Нет уж, Вы давайте по теме - указатели и ссылки, а про "1000 и 1 способ прострелить себе ногу" и так известно.
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| _zorn_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1076 Регистрация: 21.8.2007 Репутация: 1 Всего: 12 |
Но ведь вы дали не компилируемый код и не сказали в чем подвох в моём Так что не надо тут Ну если все так серьёзно - чем "ссылка" отличается от указателя в физическом плане ? Неужели "ссылка" не ссылается на адрес памяти ? Или может быть указатель, если его назвать ссылкой примет другое значение ? Зачем воду в ступе толочь ? Вот и хотел развлечь ЗЫ. Это просто конструкции языка. Физически они ни чем не отличаются. Это сообщение отредактировал(а) _zorn_ - 19.9.2015, 06:59 |
|||
|
||||
| _zorn_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1076 Регистрация: 21.8.2007 Репутация: 1 Всего: 12 |
||||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Я вот помню этот прикол со времен K&R компиляторов именно в таком виде, с пятью идущими подряд плюсиками без пробелов, выглядит устрашающе. Что я могу сказать, печально, что не компилируется. Потому что тонкости всё же есть. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| _zorn_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1076 Регистрация: 21.8.2007 Репутация: 1 Всего: 12 |
Не надо мудрить.
Чем проще ваш код читается тем лучше. Не надо шифроваться от читателей (я раньше таким был А работадатели сами не знают чего хотят часто. Где то тут на винграде была тема с неадекватной вакансией ) Там в тексте были даже такие технологии о которых я не слышал (или они умерли). Ну а знание http, nginx, apache меня всегда убивало ))) Они даже не вкурсе что httpd и apache это одно и тоже Добавлено @ 07:08 Зачем нам стариковские воспоминания ? ) Ты ведь так и не сказал, что с ним не так ))) Добавлено @ 07:11 Тонкости ДЛЯ использования библиотек и т.п. Чем он мне и не нравится. Скорей всего об этил ТОНКОСТЯХ разработчики БИБЛИОТЕК даже и не думали. Вот такой вот он undefined behavior Странно что вы не заметили в моем примере прямую отсылку... ЗЫ. А изначально это выглядело так ++i + ++i Даже статья на лурке есть Это сообщение отредактировал(а) _zorn_ - 19.9.2015, 07:17 |
|||
|
||||
| feodorv |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Бог ты мой, мало кто не знаком с этим примером, и что он с собой несет; неважно как он при этом выглядит, хоть просто i = i++. Я же хотел вернуть Вас в русло темы, не более. Если уж Вы такой занудный, то давайте я начну.
И тут самое время задуматься над тонкостями rvalue/lvalue и &&. Но это уж Вы как-нибудь сами. Итого: хотя я и согласен с точкой зрения xvr, но когда я всё это описывал, моя уверенность в её справедливость сильно пошатнулась))) -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||
|
|||||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Ещё. Никогда над этим не задумывался)))
Это сообщение отредактировал(а) feodorv - 21.9.2015, 09:35 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| drug007 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
||||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
_zorn_, в вашем примере не только нет ссылок, но и вообще может быть что угодно в зависимости от типа i.
а то, что код не компилируется - понятно, лексический анализатор жаден, и код интерпретируется как i++ ++ +i, а постфиксные выражения группируются слева направо, так что для скалярных типов будет попытка изменить rvalue основной "тонкостью" в ссылках vs указателях думаю стоит считать разницу в смысле выражений:
что является следствием главной особенности ссылки: она связывается со ссылаемым объектом единожды в момент инициализации. Добавлено через 5 минут и 27 секунд имхо удобно говорить о ссылках как об алиасах (альтернативных именах) уже объявленных переменных, тогда становится понятно и как работает, и искушения сравнивать с указателями не возникает. в этом русле и понимание rvalue reference мне кажется проще. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Давайте переформулируем: указатель от ссылки отличается всем - это разные сущности языка С++. Можно с тем же успехом спрашивать чем отличается указатель и указатель на член класса (pointer & member pointer). И то, что компилятор использует указатель для физической реализации ссылки дела не меняет. Так что вопрос об отличии указателя и ссылки попросту некорректен |
|||
|
||||
| drug007 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
И я такого же мнения. Если бы вопрос был о том, где лучше применять указатели, а где ссылки и почему - это уже совсем другой расклад. @feodorv, а не проясните про этот код?
Функция возвращает ссылку и мы этой ссылке присваиваем значение? Это сообщение отредактировал(а) drug007 - 22.9.2015, 10:16 |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
не ссылке (ссылке вообще нельзя присвоить значение, ее можно только инициализировать), а переменной на которую ссылается эта ссылка
Добавлено через 3 минуты и 48 секунд http://codepad.org/D2bBVPu2 |
|||
|
||||
| drug007 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
Я это и имел в виду. В принципе все просто, просто непривычная запись. В свое время сбил с толку default в switch'е вида:
Настолько привык, что default всегда последний. Привычки они не всегда полезные) |
||||
|
|||||
| konshyn |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
по-моему, вопрос более чем корректен. Ссылку на указатель можно создать, а вот указатель на ссылку - нет. Но что касается основного вопроса:
Считаю, что чтобы разрабатывать критически важные системы нужно знать и понимать все тонкости языка и все подводные камни, даже если их не используешь. Так что это вполне закономерный вопрос для отсеивания кандидатов ниже определенного уровня. Добавлено @ 14:07
Главное не путать ссылки и операцию взятия адреса. Хоть для этого и требуется один и тот же символ - амперсант. & Это сообщение отредактировал(а) konshyn - 26.10.2015, 11:24 -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |