не могу найти программиста-профессионала C++: все приходят либо 4.0K+ и ничего делать не хотят ("давайте я будут обсуждать архитектуру, а в свободное от этого время — писать код"), либо 1.5K и в глазах вопрос — "а он про шаблоны спросит или нет?"
а посередине никого не осталось???
программисты на C++!!! те, кто реально пишут код, любят boost, но не боготворят, начинают проект с автосборки, где Вы?!
Мне бы сейчас пару парней со старших курсов ВМК или мехмата...
Максим
job@glowbyte.com
P.S. работа алгоритмичная, с упором на производительность, не-драйвера. ненавидящим создание пользовательских интерфейсов не беспокоиться.
постоянная занятость и сильный, профессиональный коллектив
30.05.07 00:34: Перенесено модератором из 'Работа — предложения работы от прямых работодателей' — Хитрик Денис
Здравствуйте, maximm__, Вы писали:
__>не могу найти программиста-профессионала C++: все приходят либо 4.0K+ и ничего делать не хотят ("давайте я будут обсуждать архитектуру, а в свободное от этого время — писать код"), либо 1.5K и в глазах вопрос — "а он про шаблоны спросит или нет?"
Мое мнение о вас (glowbyte). Был я в вашей компании на так и давно, не жалею, что не сделали мне предложение о работе. Факты:
-компания маленькая.
-арендуют офис, в списке арендаторов не числятся. Ждал 15 снизу минут пока позвонят — мол где я там, телефон не отвечал.
-внешний вид офиса очень плохой, одна большая комната с кучей компов, расставленных в ряды как парты в классе. Плюс одна или две комнаты для начальников.
-мониторы — кубики, не ЖК, на новые не похожи.
-наверняка ни о каких дополнительных бонусах не может быть и речи (страховка и т.д.).
Лично мое мнение:
-руководство — общался только с обним человеком. Первое впечатление — безразличие ко мне. И показалось, что характер у человека сложный, с первого взгляда не хочется с ним работать.
Желаю удачи программистам 1.5K — 4.0К+. Люди этого уровня сейчас нарасхват даже с небольшим уровнем опыта.
Здравствуйте, maximm__, Вы писали:
__>а посередине никого не осталось???
__>программисты на C++!!! те, кто реально пишут код, любят boost, но не боготворят, начинают проект с автосборки, где Вы?!
Ну так работают все, не вам одному нужны
Ради прибавки зарплаты в одну-две сотни долларов (и неизвестно как на самом деле изменится система бонусов) не каждый программист решит бросить привычное место. А на $500 больше рынка редкая фирма раскошелится. Вот все и работают там, где уже работают.
ИМХО, единственная возможность нанять хорошего специалиста за не очень большие деньги, это когда он переезжает по социальным обстоятельствам. Ну там, жена поступила в аспирантуру в другом городе или поближе к пожилым родителям, или развалилась фирма, или просто в Москву из другой области.
Попробуйте поактивнее поискать на форумах других областей и предложить помощь с переездом.
Тута я =) Тока к Вам не пойду — нас и тут не плохо кормят — как раз посередине =)
А по сути — за такими охотятся, их берегут и лилеят в компаниях... По этому найти сложно... Такими людьми не раскидываются...
__>Мне бы сейчас пару парней со старших курсов ВМК или мехмата...
Здравствуйте, maximm__, Вы писали:
__>не могу найти программиста-профессионала C++: все приходят либо 4.0K+ и ничего делать не хотят ("давайте я будут обсуждать архитектуру, а в свободное от этого время — писать код"), либо 1.5K и в глазах вопрос — "а он про шаблоны спросит или нет?"
А ты подумай о нервах людей, которые собеседуют — иногда кандидата хочется прогнать после первой минуты общения — некоторые люди наивно полагают, что они программисты...
убедительная просьба следить за объемом цитирования, следующий подобный экзерсис может повлечь за собой санкции согласно правил форума — модератор
Максим,
Если тебе нужны студенты то ты и озвучивай свое желание изначально.
Я с тобой полтора часа общался и так и не понял чем же ты предлагаешь мне у тебя заниматься. Кроме абстрактной фразы "Писать код" ничего конкретного не услышал, да и чтото есть справедливого в первом коментарии ...
Про шаблоны я думаю тебе мог много чего нового рассказать, правда применить знание подобного рода на практике довольно сложно.
Да и вообще достаточно много противоречий .... вот к примеру ...
"__>P.S. работа алгоритмичная, с упором на производительность, не-драйвера. ненавидящим создание пользовательских интерфейсов не беспокоиться."
Где ты алгоритмы видел в пользовательских интерфейсах???
Да и ты слишком часто используешь оборот "профессиональный коллектив" настолько часто даже начинаешь думать а зачем это так часто повторять ... это студентам хорошо такими фразами мозги промывать ... а на взрослых людей это действует по другому..
> Где ты алгоритмы видел в пользовательских интерфейсах???
Я видел Их там полно. Достаточно попытаться визуализировать граф хотя бы из пары сотен узлов, и вы поймете, где в пользовательских интерфейсах алгоритмы. Да что там графы, даже для того, чтобы нарисовать обычную "cake" гистограмму — но так, чтобы надписи друг на друга не налазили, и то придется немножко подумать.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
>> Где ты алгоритмы видел в пользовательских интерфейсах???
S>Я видел Их там полно. Достаточно попытаться визуализировать граф хотя бы из пары сотен узлов, и вы поймете, где в пользовательских интерфейсах алгоритмы. Да что там графы, даже для того, чтобы нарисовать обычную "cake" гистограмму — но так, чтобы надписи друг на друга не налазили, и то придется немножко подумать.
Спорить не буду. Но как мне кажется для этого уже есть написанные библиотеки. По крайней мере для последнего точно. Можно конечно и велосиепд поизобретать если очень нужно.
+ спеуифика проэкта — финансовая деятельность там посто таблицы =)
Здравствуйте, Sergey, Вы писали:
>> Где ты алгоритмы видел в пользовательских интерфейсах???
S>Я видел Их там полно. Достаточно попытаться визуализировать граф хотя бы из пары сотен узлов, и вы поймете, где в пользовательских интерфейсах алгоритмы. Да что там графы, даже для того, чтобы нарисовать обычную "cake" гистограмму — но так, чтобы надписи друг на друга не налазили, и то придется немножко подумать.
Но всё же сортировка, поиск и т.п. намного реже требуются при работе с интерфейсами. А думать всегда надо если задача не тривиальная.
> S>Я видел Их там полно. Достаточно попытаться визуализировать граф хотя бы из пары сотен узлов, и вы поймете, где в пользовательских интерфейсах алгоритмы. Да что там графы, даже для того, чтобы нарисовать обычную "cake" гистограмму — но так, чтобы надписи друг на друга не налазили, и то придется немножко подумать. > > Но всё же сортировка, поиск и т.п. намного реже требуются при работе с интерфейсами. А думать всегда надо если задача не тривиальная.
Реже чем где?
А вообще, разработка GUI — область слишком многогранная, чтобы говорить о ней в целом.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, alzt, Вы писали:
A>Но всё же сортировка, поиск и т.п. намного реже требуются при работе с интерфейсами. А думать всегда надо если задача не тривиальная.
Это если ты готовые контролы используешь. А так только и ищешь, куда пользователь мышью то тычет.
Это да, если используешь действительно стандартные или сторонние контролы, но задачи часто на этом не ограничиваются. Очень часто приходится делать свои контролы. Покажите мне бесплатный контрол, который позволял бы расставлять и редактировать сплайны на картинке или для 3D модели. Может и есть платный — тут вот и думай — самому реализовывать или покупать — что дешевле.
убедительная просьба следить за объемом цитирования, следующий подобный экзерсис может повлечь за собой санкции согласно правил форума — модератор
__>постоянная занятость и сильный, профессиональный коллектив
Как-то волею судеб я попал в контору, HR-менеджер которой создавал топики типа "где все PHP-программисты? 90% приходящих на собеседования не соответствуют заявленному уровню" и пр.., при этом мне сунули исходник кода для того, чтобы я им рассказал что в нем просходит, он начинался с некоторого SQL запроса, потом проход в цикле по резалтсету (я вообще пришел на вакансию java разработчика), затем еще один SQL запрос (сам SQL писался здесь же в коде, они были довольно здоровые, я также должен был обьяснить чего они достают из базы), потом некоторая логика на java, и зетем (что меня вообще убило) был блок года типа:
%> <td>....</td>
<%
то есть это была JSP страница! я был в шоке — люди не то что про расслоение системы не слышали, они и про MVC ничего знать не хотели.
Мораль — прежде чем искать соринки в чужих глазах, вытащите бревна из своих
П.С. поймите, вы взаимодействуете не людьми, а с рынком, и не надо пытаться их разводить. Если рынок ваше предложение не принимает, в этом виноваты только вы. Чем больше вы ноете, тем больше пытаетесь для себя найти оправдание своей неправильной позиции. Лучше бы создали топик типа "Что сейчас хотят программисты"
Тут я согласен =) Вообще это дурной тон так проводить собеседования... Просто человек не умеет собеседовать. Знание языка еще ничего не значит — это как знание алфавита и умение писать стихи... По настоящему цель ведь собеседования — это понять сможет ли человек работать, сможет ли разобраться в специфике, какой опыт человек может привнести в команду.
Лучше бы создали топик типа "Что сейчас хотят программисты"
Да, общество недооценивает значимость этих людей. Несмотря на их нехватку и не взираю на то, что от спама, вирусов и DDOS атак уже не продохнуть. А кто, как не обиженные программисты устраивает это безобразие. Программистов надо холить и лелеять и не оставлять без присмотра. А иначе... Представляю картину лет через 20. Шныряют везде вредные вертолётики. Плюются чернилами и перцовым газом. Таскают мелкие предметы. Перекусывают провода. Стоит отлучиться, оставив открытым окно, втыкаются в USB, сажают трояна, крадут информацию.
Здравствуйте, 0x8000FFFF, Вы писали:
FFF>Тут я согласен =) Вообще это дурной тон так проводить собеседования... Просто человек не умеет собеседовать. Знание языка еще ничего не значит — это как знание алфавита и умение писать стихи... По настоящему цель ведь собеседования — это понять сможет ли человек работать, сможет ли разобраться в специфике, какой опыт человек может привнести в команду.
Зато незнание языка много что значит У меня на собеседовании треть кандитатов уходила после того, как не могли ответить на один из первых вопросов — как проинициализировать ссылку-член класса. Причем один человек был с шестилетним опытом, работал в крупной компании. Про ссылки не знал ничего. Это ж блин каким любознательным человеком надо быть, чтоб за 6 лет, да...
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Sergey, Вы писали:
S>Зато незнание языка много что значит У меня на собеседовании треть кандитатов уходила после того, как не могли ответить на один из первых вопросов — как проинициализировать ссылку-член класса. Причем один человек был с шестилетним опытом, работал в крупной компании. Про ссылки не знал ничего. Это ж блин каким любознательным человеком надо быть, чтоб за 6 лет, да...
Простите за глупый вопрос, имеется ввиду указатель, который является полем класса? Т.е., грубо говоря, от них требовалось вызвать конструктор некоторого объекта в конструкторе класса или я чего-то не понял?
Здравствуйте, Sergey, Вы писали:
S>Зато незнание языка много что значит У меня на собеседовании треть кандитатов уходила после того, как не могли ответить на один из первых вопросов
Ну и вопросики у вас однако На проверку знаний первейшей необходимости...
S> Причем один человек был с шестилетним опытом, работал в крупной компании. Про ссылки не знал ничего. Это ж блин каким любознательным человеком надо быть, чтоб за 6 лет, да... >> проинициализировать ссылку-член класса
Ну у меня пятилетний опыт... Ссылками пользуюсь активно, но ни разу ссылку-член класса не приходилось использовать, да и не приходит в голову для чего может понадобиться именно ссылка член класса...
>> как
ну наверное в списке инициализации в конструкторе, или как оно правильно по русски называется
class test
{
public:
test (char *a): m_ref(*a) {}
char &m_ref;
};
Угадал?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
M>Да, общество недооценивает значимость этих людей. Несмотря на их нехватку и не взираю на то, что от спама, вирусов и DDOS атак уже не продохнуть. А кто, как не обиженные программисты устраивает это безобразие. Программистов надо холить и лелеять и не оставлять без присмотра.
Согласен на 100%.
M>А иначе... Представляю картину лет через 20. Шныряют везде вредные вертолётики. Плюются чернилами и перцовым газом. Таскают мелкие предметы. Перекусывают провода. Стоит отлучиться, оставив открытым окно, втыкаются в USB, сажают трояна, крадут информацию.
Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, Sergey, Вы писали:
CC>Угадал?
Угадывать не надо, надо знать ... вопрос и вправду элементарный ...
я вот когда собеседования проходил наблюдал забавную картину ... люди по большей части не могут подсчитать количество конструкторов у класса, и совсем невнятно отвечают о случаяъ когда есть дефолтный конструктор а когда нет ...
вот кстати вспомнлось ...
class A
{
public:
A(const A&, int=0); является ли этот конструктор конструктором копирования??
};
Здравствуйте, alzt, Вы писали:
A>Здравствуйте, FDSC, Вы писали:
A>Скорее всего вот это: A>
A>class Test
A>{
A>public:
A> Test(int i):m_i(i){}
A>private:
A> int& m_i;
A>};
A>
Я в шоке... кому и зачем такое может понадобиться?
Честно говоря, я бы за такой код кое-кого бы мочканул... и уж точно не пошёл бы работать к тому, кто это спрашивает первым вопросом
Некоторые люди вообще не советуют ссылки использовать, просто чтобы сразу было видно, что значение переменной может быть изменено, а вы про ссылки в классах спрашиваете
Здесь же явные грабли — программист думает, что изменяет приватный член класса, а на самом деле...
А ведь тут можно сделать и так:
// CppLinks.cpp : Defines the entry point for the console application.
//#include"stdafx.h"#include <conio.h>
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
class C1
{
public:
C1(int &ai): i(ai)
{
}
int &i;
};
class C2
{
public:
void PrintI()
{
cout << i << endl;
}
C1 * GetC1()
{
return c1;
}
C2(int ai)
{
i = ai;
c1 = new C1(i);
}
virtual ~C2()
{
delete c1;
c1 = NULL;
}
private:
int i;
C1 * c1;
};
int _tmain(int argc, _TCHAR* argv[])
{
C2 c2(5);
C1 * c1 = c2.GetC1();
c2.PrintI();
(*c1).i = 1;
c2.PrintI();
_getch();
return 0;
}
В итоге какой-нибудь программист убъёт кучу времени, когда будет искать ошибку, потому что, возможно, забудет, что он общается со ссылкой, а не с переменной. А если бы там был указатель, то он сразу бы понял, что он куда-то указывает
Здравствуйте, puremind, Вы писали:
P>class A P>{ P>public: P> A(const A&, int=0); является ли этот конструктор конструктором копирования?? P>};
P>хотя это я так ... просто что-то навеяло ...
После ответа на этот вопрос идёт следующий: "почему?" или "а если убрать = 0", затем "а в каком параграфе стандарта это описано?", затем ехидно произносится "вот уже и не пятёрка..." или "да вы, батенька, просто всё наизусть вызубрили, но ничего не понимаете!"
Здравствуйте, CreatorCray, Вы писали:
CC>Ну у меня пятилетний опыт... Ссылками пользуюсь активно, но ни разу ссылку-член класса не приходилось использовать, да и не приходит в голову для чего может понадобиться именно ссылка член класса...
Да это опасная штука, так как то на что она указывает может умереть в процессе жизни данного объекта и получим dangling pointer, замаскированный под reference.
Хотя если указывает на часть объекта, хранимого или разделяемого данным объектом то можно.
Вообще голые указатели и ссылки как члены класса — потенциальный источник ошибок.
>>> как CC>ну наверное в списке инициализации в конструкторе, или как оно правильно по русски называется CC>
CC>class test
CC>{
CC>public:
CC> test (char *a): m_ref(*a) {}
CC> char &m_ref;
CC>};
CC>
CC>Угадал?
Ага. Вообще болшинство конструкций языка подчинаются общей логике и здравому смыслу.
FDS>Я в шоке... кому и зачем такое может понадобиться?
про move semantic слышал?
FDS>Честно говоря, я бы за такой код кое-кого бы мочканул... и уж точно не пошёл бы работать к тому, кто это спрашивает первым вопросом FDS>Некоторые люди вообще не советуют ссылки использовать, просто чтобы сразу было видно, что значение переменной может быть изменено, а вы про ссылки в классах спрашиваете
Здравствуйте, FDSC, Вы писали:
FDS>В итоге какой-нибудь программист убъёт кучу времени, когда будет искать ошибку, потому что, возможно, забудет, что он общается со ссылкой, а не с переменной. А если бы там был указатель, то он сразу бы понял, что он куда-то указывает
Вот я уже чуть выше привел пример, когда мне предлагали на собеседовании определить, что делает код, который при этом написан людьми, неслышавшими про рефакторинг, расслоение, MVC. То есть обсдача товарищей по полной.
Зачем вообще задавать такие дурацкие вопросы? Непонятно. По-моему цель — просто избавиться от соискателя вакансии. Непонравился человек, или хочет много. Поэтому у меня даже были мысли начинать искать работу с кадрового агенства — они хотя бы будут анализировать людей по более абстрактным вещам, типо выполняемая работа на предыдущей работе, личностные качества, позволяющие изучить новые моменты, с которыми не приходилось сталкиваться.
Собеседовать вообще сложно — большая ответственность. Вот видимо программеры и теряются в определении приоритетов к требованиям знаний соискателя.
А если человек заранее походил по собеседованиям, услышал все стандартные вопросы, и отвечает сходу на все? У меня было такое. На седьмом собеседовании (предыдущие 6 уложились дня в 3-4) я даже вопросов не дожидаясь сам все рассказывал (а когда только начинал ходить, были некоторые пробелы, которые собственно и закрыл благодаря собеседованиям) — всем рекомендую так делать
Мелочи вот эти все забываются быстро, в голове остаются только основные понятия. Смысл гонять человека по мелочам? По-моему просто ради выпендрежа — а то как же так, ответит он на все вопросы, будет думать что мы тут все лохи а он крутой. Хотя когда видят, что человек имеет хороший опыт, стараются не доставать вопросами (а то разумничается) — говорят больше о работе.
Здравствуйте, FDSC!
FDS>>>Я в шоке... кому и зачем такое может понадобиться?
КЛ>>про move semantic слышал?
FDS>Кстати, не слышал, не гуглится, не википедится
Насколько я понял, это вещь служит для повышения производительности. Т.е. очень странно, если человек удивляется, что кто-то не знает о ней и о полях-ссылках, всё-таки далеко не в каждой конторе занимаются хоть какой-то оптимизацией программ
Здравствуйте, FDSC, Вы писали:
FDS>Я в шоке... кому и зачем такое может понадобиться? FDS>Честно говоря, я бы за такой код кое-кого бы мочканул... и уж точно не пошёл бы работать к тому, кто это спрашивает первым вопросом
Лучше передавать указатель и проверять его на NULL?!
Здравствуйте, machine3000, Вы писали: M>Да, общество недооценивает значимость этих людей. Несмотря на их нехватку и не взираю на то, что от спама, вирусов и DDOS атак уже не продохнуть. А кто, как не обиженные программисты устраивает это безобразие.
Я сломаю Ваши детские фантазии. "Вредные" програмисты ИМХО делятся на три категории
1. Молокососы, которые
— прочитали об уязвимости в вынь98 на одном сайте
— скачали программу для атаки этой уязвимости на другом сайте
— взломали соседа Васю
— возомнили себя кул хакерами
2. Бизнесмены.
Для них это бизнес. Читсый бизнес. Трояны пишутся для создание сети зомби машин, которые рассылают спам.
3. Художники.
Написание вирусов ради этого самого написания. Таких очень немного
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, FDSC, Вы писали:
FDS>>Я в шоке... кому и зачем такое может понадобиться? FDS>>Честно говоря, я бы за такой код кое-кого бы мочканул... и уж точно не пошёл бы работать к тому, кто это спрашивает первым вопросом LM>Лучше передавать указатель и проверять его на NULL?!
Да, в синтаксисе будет явно видно, что работа ведётся именно с указателем
Здравствуйте, FDSC, Вы писали:
LM>>Лучше передавать указатель и проверять его на NULL?! FDS>Да, в синтаксисе будет явно видно, что работа ведётся именно с указателем
А обязан я его проверять на нулл?
Здравствуйте, FDSC, Вы писали:
SC>>Move Constructors
FDS>Спасибо.
FDS>Насколько я понял, это вещь служит для повышения производительности. Т.е. очень странно, если человек удивляется, что кто-то не знает о ней и о полях-ссылках, всё-таки далеко не в каждой конторе занимаются хоть какой-то оптимизацией программ
А про Move Constructors я не спрашиваю Просто если человек не слышал о списках инициализации или тем более о ссылках, то с скорее всего язык он почти не знает и учить его придется очень многому. Если бы цель была, как тут предположили, просто избавиться от соискателя вакансии, я бы задавал совсем другие вопросы. Например такой:
Может ли (согласно стандарту, про реальные компиляторы пока не будем) скомпилироваться такой код:
void Foo::bar(int a = 4, int b)
{
}
И когда соискатель заявит, что не может (это вам в форуме понятно, что раз вопрос задан в качестве коварного, то ясен пень что оно скомпилироваться обязано, а на собеседовании все выглядит совсем по-другому), следом еще один вопрос — что надо написать в декларации класса, чтобы оно скомпилировалось. Вот это я понимаю, и коварно, и бессмысленно — потому что никто в здравом уме такого не напишет. Хуже вопрос только про ++i++ и скобки
А вообще мне у Яндекса очень вопрос нравится, про проблемы в этом кусочке кода:
Здравствуйте, Sergey, Вы писали:
S>А про Move Constructors я не спрашиваю Просто если человек не слышал о списках инициализации или тем более о ссылках, то с скорее всего язык он почти не знает и учить его придется очень многому. Если бы цель была, как тут предположили, просто избавиться от соискателя вакансии, я бы задавал совсем другие вопросы. Например такой:
Ну дак спрашивать надо про списки инициализации и ссылки как параметры функций. Зачем спрашивать ерунду какую-то... понятное дело, что передачу параметра по ссылке человек вполне может знать, а как там что иницилизируется в конструкторе, да ещё полем.... ну, не знаю...
S>Вот это я понимаю, и коварно, и бессмысленно — потому что никто в здравом уме такого не напишет. Хуже вопрос только про ++i++ и скобки
Однако... и что надо написать?
#define b c = 3
S>А вообще мне у Яндекса очень вопрос нравится, про проблемы в этом кусочке кода:
S>Сразу видно, человек только книжки читал или еще и попрограммировать успел.
А как вы это видите? Т.е. что скажет человек с опытом, и что — без опыта? Ну, не надо всё разбирать, естественно, просто показать различие
Скажем, что они должны сказать про строчки *f=*b и delete i?
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, FDSC, Вы писали:
LM>>>Лучше передавать указатель и проверять его на NULL?! FDS>>Да, в синтаксисе будет явно видно, что работа ведётся именно с указателем LM>А обязан я его проверять на нулл?
Здравствуйте, Sergey, Вы писали:
S>Зато незнание языка много что значит У меня на собеседовании треть кандитатов уходила после того, как не могли ответить на один из первых вопросов — как проинициализировать ссылку-член класса.
Это означает лишь то, что благодаря вашим усилиям, компания, вполне вероятно, лишилась многих хороших программистов.
S>Причем один человек был с шестилетним опытом, работал в крупной компании. Про ссылки не знал ничего. Это ж блин каким любознательным человеком надо быть, чтоб за 6 лет, да...
Наверное, этот случай должен был убедить вас в том, что вы спрашиваете какую-то ерунду, да?
Вообще ваш вопрос — один из самых глупых вопросов для собеседования, которые я когда-либо слышал.
Мало того, что вы спрашиваете об одной из наименее полезных особенностей конкретного языка, которую в 100% случаев можно заменить другой конструкцией без какого-либо ущерба для производительности и читаемости кода. Так, ко всему этому, исчерпывающую информацию об этой особенности можно получить из MSDN в течение одной минуты.
Давайте, я вас сейчас спрошу о том, как в функции SetSecurityDescriptorDacl указать, что передаваемый DACL был в явном виде указан пользователем. А может быть, вы даже не знаете, что такое DACL? Это ж, блин, каким любознательным человеком надо быть, чтоб за сколько там у вас лет опыта программирования под Windows, да...
Причем, обратите внимание, неспособность ответить как на мой вопрос, так и ваш, свидетельствует лишь о том, что человек не использовал некоторую конструкцию в силу того, что она ему была не нужна. Ответы на оба вопроса находятся в течение минуты в документации. Однако вы, в отличие от меня, спросили про вещь, использования которой можно избежать всегда. Так если вы считаете мой вопрос глупым, то как вы охарактеризуете ваш?
Здравствуйте, LuciferMoscow, Вы писали:
LM>Я сломаю Ваши детские фантазии. "Вредные" програмисты ИМХО делятся на три категории LM>1. Молокососы, которые LM>- прочитали об уязвимости в вынь98 на одном сайте LM>- скачали программу для атаки этой уязвимости на другом сайте LM>- взломали соседа Васю LM>- возомнили себя кул хакерами
LM>2. Бизнесмены. LM>Для них это бизнес. Читсый бизнес. Трояны пишутся для создание сети зомби машин, которые рассылают спам.
Там не совсем на самом деле так — там есть очень большая прослойка людей, для которых серьезные дядьки написали кучу действительно хорошего и опасного софта, а они занимаются его "коммерческой эксплуатацией" — сайты делают из него него с которых можно скачать "супер кодек который порнуху жмет в 2 раза лучше чем все остальные" и т.п. Сотрудничество между ними разное — от прямого денежного, до "никогда не видел, просто трояны делают работу как для того кто ими всех заразил(отконфигурировал), так и для того кто их написал". Наверное этих людей можно назвать "кулхацкеры которые решили подзаработать"
P.S. Кстати мысли в тему — для предотвращения от "кулхацкеров" многие эксплойты принято распространять в неработоспособном виде. Помню, когда для циски вышел эксплойт который могу уронить почти любую циску которая роутила IPv4 — ребята цискари попросили меня его собрать. Собрал — не работает. Открываю а там в функции main цикл(с описанием — цикл шлет пакеты такого типа которые никогда не выкидываются из буфера, он засоряется — циске кирдык), и цикл аж от 1 до 4 — афигеть. Поправил на 1M — работает. Что уже позже подумалось — такой простой fix отсекает процентов 95 кулхацкеров которые научились делать "make; make install"
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте, FDSC, Вы писали:
LM>>>>Лучше передавать указатель и проверять его на NULL?! FDS>>>Да, в синтаксисе будет явно видно, что работа ведётся именно с указателем LM>>А обязан я его проверять на нулл? FDS>Да можно и не надо
А по русски?
Здравствуйте, puremind, Вы писали:
P>class A P>{ P>public: P> A(const A&, int=0); является ли этот конструктор конструктором копирования?? P>};
Вот теперь буду знать ответ на этот вопрос.
Подобное на собеседовании некорректно.
Но мне не хотелось бы, чтобы я не получил какое-нибудь желаемое место только из-за того, что мне задали подобный вопрос.
Поэтому к совету для работодателей "не задавать кандидатам глупые вопросы" могу добавить совет кандидатам:
запомните все типичные вопросы вроде этого, используется-не используется какая разница, по крайней мере на собеседовании может пригодиться.
Здравствуйте, LuciferMoscow, Вы писали:
LM>test (char& a) будет правильнее(код говорит программисту, что нулл сюда совать нельзя)
Ну, про то, чтоб передать ссылку я потом подумал.
А так была мысль что туда передается что то не ссылкой чем потом ссылка в классе инициализируется
передавать и запоминать ссылку как то уж ну совсем бессмысленно...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, DKM_MSFT, Вы писали:
S>>Причем один человек был с шестилетним опытом, работал в крупной компании. Про ссылки не знал ничего. Это ж блин каким любознательным человеком надо быть, чтоб за 6 лет, да... DKM>Наверное, этот случай должен был убедить вас в том, что вы спрашиваете какую-то ерунду, да?
Ну тут одно только "но": утверждалось что кандидат с "шестилетним опытом, работал в крупной компании. Про ссылки не знал ничего"
Совсем ничего не знать про ссылки это конечно плохо. Не знать как проинитить ссылку член класса — это простительно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
> Ну дак спрашивать надо про списки инициализации и ссылки как параметры функций. Зачем спрашивать ерунду какую-то... понятное дело, что передачу параметра по ссылке человек вполне может знать, а как там что иницилизируется в конструкторе, да ещё полем.... ну, не знаю... > > S>Вот это я понимаю, и коварно, и бессмысленно — потому что никто в здравом уме такого не напишет. Хуже вопрос только про ++i++ и скобки > > Однако... и что надо написать? > #define b c = 3 >
Да всего лишь
class Foo
{
void bar(int a, int b = 0);
};
как ни странно. Пример из 8.3.6.6. Долго ржал, когда впервые прочитал этот пункт стандарта.
> > > S>А вообще мне у Яндекса очень вопрос нравится, про проблемы в этом кусочке кода: > > S>Сразу видно, человек только книжки читал или еще и попрограммировать успел. > > А как вы это видите? Т.е. что скажет человек с опытом, и что — без опыта? Ну, не надо всё разбирать, естественно, просто показать различие
Человек с опытом найдет больше проблем. Штук 5-7, смотря как считать.
> Скажем, что они должны сказать про строчки *f=*b и delete i?
Ну для начала *f=*b не скомпилируется из-за приватного наследования. Потом неплохо бы сказать про то, что совершенно непонятно, что хотели сказать этой строчкой кода — дефолтная семантика копирования в данном случае явно ошибочна, а вот какая нужна — это вопрос. Дальше разговор плавно переходит на подсчет ссылок, передачу владения при копировании, "глубокое копирование" aka клонирование и т.д. Странно, что в Yandex этот вопрос письменно задают — для устного собеседования он на мой взгляд гораздо лучше подходит.
Насчет delete i все проще — это в данном случае UB.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, Константин Л., Вы писали:
FDS>>>Я в шоке... кому и зачем такое может понадобиться?
КЛ>>про move semantic слышал?
FDS>Ну дак тогда надо не про ссылки спрашивать, а про этот "move semantic"
FDS>Кстати, не слышал, не гуглится, не википедитсяа
А можно еще структурные паттерны проектирования вспомнить ...
Здравствуйте, alzt, Вы писали:
A>Здравствуйте, puremind, Вы писали:
P>>class A P>>{ P>>public: P>> A(const A&, int=0); является ли этот конструктор конструктором копирования?? P>>};
A>Вот теперь буду знать ответ на этот вопрос. A>Подобное на собеседовании некорректно. A>Но мне не хотелось бы, чтобы я не получил какое-нибудь желаемое место только из-за того, что мне задали подобный вопрос. A>Поэтому к совету для работодателей "не задавать кандидатам глупые вопросы" могу добавить совет кандидатам: A>запомните все типичные вопросы вроде этого, используется-не используется какая разница, по крайней мере на собеседовании может пригодиться.
Этот вопрос я никогда не спрашивал. Просто почти никто не знает ответа сразу, но если человек понимает как работает С++ он сразу поймет, если нет то значит у человека мало опыта и он плохо представляет процесс компиляции. Хотя еще раз повторюсь вопроса такого я не задавал.
Но вот человек которые не может сказать сколько у class A {}; конструкторов желаемого места явно не получил бы ...
Опять же есть вопросы такого рода:
1. Неявное преобразование типов
2. Поиск наилучшего матча для шаблонных функций...
готов спорить что без подготовки никто не ответит полно и правильно ... вопрос нужно не нужно оставляю открытым ...
Здравствуйте, DKM_MSFT, Вы писали:
DKM>Причем, обратите внимание, неспособность ответить как на мой вопрос, так и ваш, свидетельствует лишь о том, что человек не использовал некоторую конструкцию в силу того, что она ему была не нужна. Ответы на оба вопроса находятся в течение минуты в документации. Однако вы, в отличие от меня, спросили про вещь, использования которой можно избежать всегда. Так если вы считаете мой вопрос глупым, то как вы охарактеризуете ваш?
Не надо юродствовать это раз ...
Два, позволю себе с вами не согласится по нескольким пунктам.
Сколько вы в своей жизни провели собеседований?
вопрос про ссылки ЭЛЕМЕНТАРНЫЙ — и если человек не знает, не может догадать или вывести гуся из опыта — это серьезный звонок. И можно воздержаться от бездоказательных утверждений типа — "по вашей вине столько хороших сотрудников" ...
Во первых — хороший сотрудник должен писать хороший код, а это невозможно без знания языка ...
Во вторых к ссылкам можно еще добавить const-модификаторы, некоторые "профессионалы" не понимают когда и зачем его использовать и не видят разницы между ...
сonst int *
int * const
class A
{
void f();
void f() const;
};
А это уже реальный косяк! .. =)
и понимание основных механизмов языка (в мсдн-е не дают) это не тоже самое что и знание кактой то апишной функции которую действительно можно посмотреть в справочнике ....
> S>Человек с опытом найдет больше проблем. Штук 5-7, смотря как считать. > > Вроде бы где-то видел, что в этом куске кода находили больше 10 проблем. ( 12, если не ошибаюсь )
Ну это опять же смотря как считать. Например, отсутствие виртуального деструктора в базовом классе проблемой не является, поскольку наследование приватное. Но, с другой стороны, если вздумается разрешить операцию копирования, это можно сделать в том числе и отказавшись от приватного наследования — тогда в проблемы можно засчитать и виртуальный деструктор. В общем, повторюсь — для полноценной беседы вопрос замечательный.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, DKM_MSFT, Вы писали:
DKM>Вообще ваш вопрос — один из самых глупых вопросов для собеседования, которые я когда-либо слышал.
про ссылку интересный вопрос, однако.
Известно, что ссылку нельзя переназначить и ссылка всегда должна быть инициализированная.
Эту концепцию, должен знать любой c++ программист. Как проверить что человек знает это правило? Во для этого такой вопрос даже ничего, необязательно знать ответ, можно посмотреть ход мысли.
Далее, это правило наталкивает на обсуждения, можно по размышлять что тогда делать с такой конструкцией
struct ABC
{
int &a;
};
может ли существовать такой тип ABC, вообще? Если программист "с лету" говорит "Да, проблем нет." Тогда что делать с правилом инициализации ссылки? Тут можно многое спросить еще, про дефолтный конструктор, как его генерируют и пр. Такие вопросы нужны что-бы отфильтровать шлак и посмотреть видел ли человек C++ вообще.
Здравствуйте, puremind, Вы писали:
P>А можно еще структурные паттерны проектирования вспомнить ...
Ну... мне нечего вспоминать на этот счёт — не знаю я этого
Можно ссылочку (на открытый проект) на пример реального кода, где используются ссылки как поля объектов. Или просто привести здесь код, когда вот без это ссылки жизнь становится нехорошей? Просто ну вот не приходит в голову кому и зачем может такое понадобится. Я считаю, что это явный источник трудноуловимых ошибок... буду рад поменять своё мнение, но теперь я, кажется, понимаю, откуда у программистов по статистике 6 ошибок на сто строк... (впрочем, позавчера я тоже сделал 6 ошибок на 100 строк на Nemerle...)
Здравствуйте, FDSC, Вы писали:
<skepped> FDS>Можно ссылочку (на открытый проект) на пример реального кода, где используются ссылки как поля объектов. Или просто привести здесь код, когда вот без это ссылки жизнь становится нехорошей? Просто ну вот не приходит в голову кому и зачем может такое понадобится.<skippe>
опять не из реального проекта, но идея должна быть понятна:
В общем RAII. Не нужно закрывать соединение, оно само закроется.
А также файлы, хэндлы и прочая может быть автомат. освобождены/деинициализированы и т.д.)
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, superman, Вы писали:
S>>Здравствуйте, FDSC, Вы писали:
FDS>>>Я в шоке... кому и зачем такое может понадобиться?
S>>а потом возникают вопросы о проблемах с понимением молодых програмистов
FDS>Я, вообще-то, не C++-программист так что и проблемы возникают не из-за этого
Хм.. а к чему тогда вообще этот разговор? что за привычка учить других тому, в чем сам "не в зуб ногой".
Я С++ програмист. Я отвечу как проинициализировать член-ссылку класа даже если меня разбудить ночью, хоть и начну свой ответ с нецензурных выражений в адрес разбудившего . Так же расскажу что в этом плохого и хорошего. В прошлом я неоднократно использовал такое в своей работе, соглашусь что это было не самым элегантным, но удовлетворительным и единственным доступным мне тогда решением. Я просто недоумеваю по поводу ваших воплей на тему "потерянных ценных сотрудников". я предполагаю что и среди моих знакомых есть знакомые "С++ програмисты" не способные ответить на подобный вопрос но склонен списывать это на их недоученность а никак не на глупость вопроса.
Здравствуйте, puremind, Вы писали:
P>вопрос про ссылки ЭЛЕМЕНТАРНЫЙ — и если человек не знает, не может догадать или вывести гуся из опыта — это серьезный звонок. И можно воздержаться от бездоказательных утверждений типа — "по вашей вине столько хороших сотрудников" ...
А я, например, очень неуверенно себя чувствую, если вынужден догадываться. Откуда вы знаете, может соискатель волнуется, а тут вы его ещё заставляете чувствовать себя ещё более неуверенно... естественно, он может и ошибиться
P>Во первых — хороший сотрудник должен писать хороший код, а это невозможно без знания языка ... P>Во вторых к ссылкам можно еще добавить const-модификаторы, некоторые "профессионалы" не понимают когда и зачем его использовать и не видят разницы между ...
Я не профессионал в C++, но, думаю, отвечу правильно (только не смейтесь, если ошибусь ) и использую эти вещи:
// Неконстантный указатель на константный объект. Т.е. можно изменить указатель, но нельзя значение переменной, на которую он указывает
// Кстати, я всегда пишу int const *, насколько я знаю, это тоже самое... P>сonst int *
// Константный указатель на неконстантный объект. Т.е. переменную можно изменить, но указатель всегда будет указывать именно на эту переменную P>int * const
P>class A P>{ P> void f();
// тут не уверен, если не ошибаюсь, константная функция не изменяет состояния объекта, т.е. все поля в методе константны P> void f() const; P>};
P>А это уже реальный косяк! .. =)
Ну дак вы же после ссылки уже отправите, до констант даже не дойдёт...
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, FDSC, Вы писали:
LM>>>>>Лучше передавать указатель и проверять его на NULL?! FDS>>>>Да, в синтаксисе будет явно видно, что работа ведётся именно с указателем LM>>>А обязан я его проверять на нулл? FDS>>Да можно и не надо LM>А по русски?
Так устроит? (см. пояснения в комментариях)
#include"stdafx.h"#include <conio.h>
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
class C1
{
public:
C1(int &ai): i(&ai), li(ai) // указатель берётся от существующей переменной, ничего проверять на NULL не надо
{
}
int * const i; // указатель константен - его нельзя изменитьint &li; // абсолютно аналогично со ссылкой, её ведь тоже нельзя изменить во время работы
};
class C2
{
public:
void PrintI()
{
cout << i << endl;
}
C1 * GetC1()
{
return c1;
}
C2(int ai)
{
i = ai;
c1 = new C1(i);
}
virtual ~C2()
{
delete c1;
c1 = NULL;
}
private:
int i;
C1 * c1;
};
int _tmain(int argc, _TCHAR* argv[])
{
C2 c2(5);
C1 * c1 = c2.GetC1();
// как и в случае со ссылкой c1->li = 1;
// всё проходит нормально, только мы явно показываем, что изменяем не переменную-поле класса,
// а значение переменной, расположенной по некоторому адресу
c2.PrintI();
*c1->i = 1;
// Попытаемся обнулить указатель - не получится. Код полностью аналогичен коду со ссылкой за исключением напоминания программисту
// что он работает не с переменной, а с указателем на переменную
// c1->i = NULL; // Error 1 error C2166: l-value specifies const object f:\prg\tmp\070530cpplinks\cpplinks\cpplinks.cpp 87
c2.PrintI();
_getch();
return 0;
}
_>может ли существовать такой тип ABC, вообще? Если программист "с лету" говорит "Да, проблем нет." Тогда что делать с правилом инициализации ссылки? Тут можно многое спросить еще, про дефолтный конструктор, как его генерируют и пр. Такие вопросы нужны что-бы отфильтровать шлак и посмотреть видел ли человек C++ вообще.
мы тут на днях встретили в одной библиотеке такой перл:
class Foo;
class A {
public:
A(Foo&);
A();
void do_something();
private:
Foo& m_foo;
bool m_is_foo_ok;
}
A::A(Foo& foo)
: m_foo(foo)
, m_is_foo_ok(true)
{}
A::A(Foo& foo)
: m_foo(*NULL)
, m_is_foo_ok(false)
{}
и тереь внимание в студии, самая главная часть перла:
void A::do_something()
{
if (m_is_foo_ok){
m_foo.do_something();
} else {
// TODO хм.. надо будет подумать как обрабатывать эту ситуёвину
}
}
Здравствуйте, sc, Вы писали:
sc>В общем RAII. Не нужно закрывать соединение, оно само закроется. sc>А также файлы, хэндлы и прочая может быть автомат. освобождены/деинициализированы и т.д.)
Что мешает конструктор Connection вынести прямо в структуру?
Что мешает передать структуре указатель, а не ссылку?
Я не против того, что ссылка может потребоваться, но когда вместо неё нельзя использовать указатель, или можно, но очень неудобно? Я просто не понимаю, почему человек удивляется, что после 6 лет работы программист этого в глаза не видел. Всё может быть спокойно реализовано на указателях.
Я просто считаю, что ссылка-поле — это очень нехорошая вещь с точки зрения скрытия семантики работы с указателем, а не самой переменной
Ваш пример можно было бы реализовать вообще через класс, который бы сам создавал и открывал соединение
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, puremind, Вы писали:
P>>А можно еще структурные паттерны проектирования вспомнить ...
FDS>Ну... мне нечего вспоминать на этот счёт — не знаю я этого
FDS>Можно ссылочку (на открытый проект) на пример реального кода, где используются ссылки как поля объектов. Или просто привести здесь код, когда вот без это ссылки жизнь становится нехорошей? Просто ну вот не приходит в голову кому и зачем может такое понадобится. Я считаю, что это явный источник трудноуловимых ошибок... буду рад поменять своё мнение, но теперь я, кажется, понимаю, откуда у программистов по статистике 6 ошибок на сто строк... (впрочем, позавчера я тоже сделал 6 ошибок на 100 строк на Nemerle...)
std::auto_ptr
всевозможные scoped lock'и, guard'ы etc.
Здравствуйте, DKM_MSFT, Вы писали:
DKM>Здравствуйте, Sergey, Вы писали:
S>>Зато незнание языка много что значит У меня на собеседовании треть кандитатов уходила после того, как не могли ответить на один из первых вопросов — как проинициализировать ссылку-член класса.
DKM>Это означает лишь то, что благодаря вашим усилиям, компания, вполне вероятно, лишилась многих хороших программистов.
Если таких берут в MS, то понятно, кто пишет ATL
S>>Причем один человек был с шестилетним опытом, работал в крупной компании. Про ссылки не знал ничего. Это ж блин каким любознательным человеком надо быть, чтоб за 6 лет, да...
DKM>Наверное, этот случай должен был убедить вас в том, что вы спрашиваете какую-то ерунду, да?
За 6 лет он обязан был знать это. Может он спец по C With Classes
Здравствуйте, superman, Вы писали:
S>Здравствуйте, FDSC, Вы писали:
FDS>>Здравствуйте, superman, Вы писали:
S>>>Здравствуйте, FDSC, Вы писали:
FDS>>>>Я в шоке... кому и зачем такое может понадобиться?
S>>>а потом возникают вопросы о проблемах с понимением молодых програмистов
FDS>>Я, вообще-то, не C++-программист так что и проблемы возникают не из-за этого
S>Хм.. а к чему тогда вообще этот разговор? что за привычка учить других тому, в чем сам "не в зуб ногой".
А где я сказал, что в я "не в зуб ногой"? Просто вы начали говорить, что я не "в зуб ногой" и оттуда все и проблемы, я вам ответил, что я на C++ никогда проекты, которые использовали больше 4-х человек не писал. Вряд ли я могу называться после этого C++ программистом, но участвовать в обсуждении у меня права никто не отнимал. В конце концов, курс по C++ я сдал на отл. автоматом
S>Я С++ програмист. Я отвечу как проинициализировать член-ссылку класа даже если меня разбудить ночью, хоть и начну свой ответ с нецензурных выражений в адрес разбудившего . Так же расскажу что в этом плохого и хорошего. В прошлом я неоднократно использовал такое в своей работе, соглашусь что это было не самым элегантным, но удовлетворительным и единственным доступным мне тогда решением. Я просто недоумеваю по поводу ваших воплей на тему "потерянных ценных сотрудников". я предполагаю что и среди моих знакомых есть знакомые "С++ програмисты" не способные ответить на подобный вопрос но склонен списывать это на их недоученность а никак не на глупость вопроса.
Я не воплю по поводу потерянных ценных сотрудников, не приписывайте мне слова других.
Я говорю только то, что человек может вполне нормально программировать, но на собеседовании не ответить на этот вопрос, просто из-за излишнего волнения. Был бы у него под рукой компилятор, он бы это сделал за пол минуты, только вот он этого всё равно никогда бы не САМ стал делать. А то, что он САМ не станет делать, ему и не нужно отвечать.
Считаю, что вместо этого вопроса было бы уместно привести код с этой ссылкой и спросить, что делается. Хотя, в принципе, если ищется действительно хороший программист, то, конечно, на вопрос он должен ответить, даже если никогда этого не видел.
А вообще, в ваших словах есть доля правды — соображать-то действительно надо, даже если не использовал
DKM>>Наверное, этот случай должен был убедить вас в том, что вы спрашиваете какую-то ерунду, да?
КЛ>За 6 лет он обязан был знать это. Может он спец по C With Classes
Дык "каким образом" он обязан был это знать? Его что в военкомате этому обучали?
Программировал себе человек, горя не знал, а вы тут ему, "обязан"
FDS>А где я сказал, что в я "не в зуб ногой"? Просто вы начали говорить, что я не "в зуб ногой" и оттуда все и проблемы, я вам ответил, что я на C++ никогда проекты, которые использовали больше 4-х человек не писал. Вряд ли я могу называться после этого C++ программистом, но участвовать в обсуждении у меня права никто не отнимал. В конце концов, курс по C++ я сдал на отл. автоматом
извините, погорячился.
я просто когда слышу фразу "это деталь, за 5 мнут надйду в МСДН" зверею и начинаю "мочить" всех без разбора.
FDS>Я не воплю по поводу потерянных ценных сотрудников, не приписывайте мне слова других. FDS>Я говорю только то, что человек может вполне нормально программировать, но на собеседовании не ответить на этот вопрос, просто из-за излишнего волнения. Был бы у него под рукой компилятор..
Не может!
Студент, сдавший курс по С++ на отлично автоматом может нормально програмировать и быть ценным (а также безценным) сотрудником и без подобных знаний, НО ИМХО Человек с 6-ю годами на С++ на этот вопрос не ответить права не имеет.
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, pavel_turbin, Вы писали:
_>>может ли существовать такой тип ABC, вообще? Если программист "с лету" говорит "Да, проблем нет."
FDS>А если он ответит, что это невозможно? Что вы будете делать?
попрошу обосновать "почему", если он ответит "ссылка всегда должна быть инициализированная", можно спросить что нужно исправить в типе "struct ABC", чтобы сделать его возможным. Если не может ответить, спросить про роль конструктора. Далее, в свете только что изложенных сведений про конструкторы, можно вернуться к вопросу.
Можно еще спросить, где такая конструкция "struct ABC" может быть нужна, пример из жизни. (ответ объекты синхронизации)
PS.
Вообще, человек, который говорит, что ссылки не нужны, т.к. их можно заменить указателями -- это скорее "C", а не C++ программист, после этого можно решать "Мы ищем C++ или C программиста"
.
Здравствуйте, maximm__, Вы писали:
__>программисты на C++!!! те, кто реально пишут код, любят boost, но не боготворят, начинают проект с автосборки, где Вы?!
Человек не знающий основных паттернов, смартпоинтеров и интрузивных контейнеров не может считаться опытным программистом, а значит у него недостаток опыта. Почему я так считаю — потому что — программист — человек ленивый, а использование таких вещей — очень облегчает жизнь, а значит — опыт есть =) Дальше встает вопрос — либо брать и учить (либо методом грабли, либо методом сенсей), постоянно отвлекаясь, либо искать опытных людей... Вопрос решается просто — что вы можите себе позволить =)
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, puremind, Вы писали:
P>>А можно еще структурные паттерны проектирования вспомнить ...
FDS>Ну... мне нечего вспоминать на этот счёт — не знаю я этого
FDS>Можно ссылочку (на открытый проект) на пример реального кода, где используются ссылки как поля объектов.
Элементарно.
class Mutex
{
public:
Mutex() { /* make mutex here */ }
~Mutex() { /* destroy mutex here */ }
void lock();
void unlock();
};
class CriticalSection
{
public:
void lock();
void unlock();
};
template<class Synch>
class ScopedLocker
{
Synch &m_synch;
public:
ScopedLocker(Synch &synch): m_synch(synch)
{
m_synch.lock();
}
~ScopedLocker()
{
m_synch.unlock();
}
};
typedef ScopedLocker<Mutex> MutextScopedLocker;
Здравствуйте, DKM_MSFT, Вы писали:
S>>Причем один человек был с шестилетним опытом, работал в крупной компании. Про ссылки не знал ничего. Это ж блин каким любознательным человеком надо быть, чтоб за 6 лет, да...
DKM>Наверное, этот случай должен был убедить вас в том, что вы спрашиваете какую-то ерунду, да?
Нет, этот случай убедил меня в том, что резюме верить нельзя. Если бы мы искали С программиста, мы бы того человека взяли. Но нам был нужен человек со знанием С++, и никакого желания кого-то переучивать у меня не было. А в плюсах он вообще плавал — не только в ссылках.
DKM>Вообще ваш вопрос — один из самых глупых вопросов для собеседования, которые я когда-либо слышал.
Ок, просветите меня, о чем на собеседовании надо спрашивать? Про крышки от люков?
DKM>Мало того, что вы спрашиваете об одной из наименее полезных особенностей конкретного языка, которую в 100% случаев можно заменить другой конструкцией без какого-либо ущерба для производительности и читаемости кода.
А умение понимать чужой код у нас теперь типа не котируется? Если в программе этих ссылок как грязи, а человек не понимает ни списков инициализации, ни ссылок — как он будет в ней разбираться?
DKM>Так, ко всему этому, исчерпывающую информацию об этой особенности можно получить из MSDN в течение одной минуты.
Угу, а исчерпывающую информацию почти о всех английских словах можно получить в словаре в течение одной минуты. Только наличие под рукой словаря переводчиком вас не сделает.
DKM>Давайте, я вас сейчас спрошу о том, как в функции SetSecurityDescriptorDacl указать, что передаваемый DACL был в явном виде указан пользователем. А может быть, вы даже не знаете, что такое DACL? Это ж, блин, каким любознательным человеком надо быть, чтоб за сколько там у вас лет опыта программирования под Windows, да...
Как ни странно, что такое DACL я знаю.
DKM>Причем, обратите внимание, неспособность ответить как на мой вопрос, так и ваш, свидетельствует лишь о том, что человек не использовал некоторую конструкцию в силу того, что она ему была не нужна.
Видел я код, который такие люди пишут. Говнище типа MFC или ATL'я из VC6. if (error) goto cleanup, ага.
DKM>Ответы на оба вопроса находятся в течение минуты в документации.
Для этого хотя бы нужно знать, что именно искать.
DKM>Однако вы, в отличие от меня, спросили про вещь, использования которой можно избежать всегда. Так если вы считаете мой вопрос глупым, то как вы охарактеризуете ваш?
Разумеется, свой вопрос я считаю крайне простым, на такой вопрос должен легко ответить любой знающий С++ человек.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Читаю эту ветку находясь в отпуске на море... И знаете, такое чуство возникает, что возня какая то у вас там в Москве нездоровая
Не то что бы я там че то, просто я к тому что оторвите взгляд от компа, типа повертите в разные стороны и все такое...
А вы опять за свои копи-конструкторы, констатные методы и прочее ...
_>попрошу обосновать "почему", если он ответит "ссылка всегда должна быть инициализированная", можно спросить что нужно исправить в типе "struct ABC", чтобы сделать его возможным
Я бы просто сказал, что объявление рабочее и посмотрел, как будет выкручиваться. Но, в общем, правильно, согласен. Этот пример вполне допустим
_>PS. _>Вообще, человек, который говорит, что ссылки не нужны, т.к. их можно заменить указателями -- это скорее "C", а не C++ программист, после этого можно решать "Мы ищем C++ или C программиста"
Лично моё мнение: собственно, а чем ссылки лучше константных указателей? Я тут где-то показывал эквивалентный код на указателях, заменяющий ссылку. Чем вам указатели не нравятся? Для тех же объектов синхронизации ведь совершенно без разницы, будете вы туда ссылку передавать или запоминать адрес в константный указатель.
sc>>В общем RAII. Не нужно закрывать соединение, оно само закроется.
D>Причём ещё до начала работы с ним.
Это точно Спешил. Но надеюсь все поняли, что я имел ввиду
Здравствуйте, pavel_turbin, Вы писали:
FDS>>Можно ссылочку (на открытый проект) на пример реального кода, где используются ссылки как поля объектов.
_>Элементарно.
Здравствуйте, Sergey, Вы писали:
S>А умение понимать чужой код у нас теперь типа не котируется? Если в программе этих ссылок как грязи, а человек не понимает ни списков инициализации, ни ссылок — как он будет в ней разбираться?
А вы его ему кода не давали, вы просили его написать. Разница принципиальная, согласитесь
Сергей — я Вас поддерживаю, а знаете что происходит — дальше будет хуже.
Мы те, кому 26-35 — подростковый период провели тогда, когда компьютер — был вещью из мечт, когда приходилось работать и выкручиваться из тех условий, что были когда-то, и паять свой первый Спектрум, изобретать при программировании и главное думать... Была Романтика и самостоятельное желание искать материал, которого было крайней мало — когда книжку передавали из рук в руки... А сейчас всякого хлама написано столько, что стоящие вещи в них теряются... А юниоры тонут в этом объеме хлама... и как следствие — знания хлама есть, знания основ и понимание их — нет...
Сейчас компьютер для большенства — это обыденная вещь и по этому разбираться в нем ни у кого нет желания — все на уровне Домохозяйки — дяде Биллу с его лозунгом о домохозяйке сказать можно спасибо. Остались нормальные разве что Unix/Linux программисты, но их мало... Никогда не думал, что лучшим для Windows системным программистом станет UNIX/Linux программист =)
Здравствуйте, sc, Вы писали:
D>>Причём ещё до начала работы с ним. sc>Это точно Спешил. Но надеюсь все поняли, что я имел ввиду
Вот, видите какой вред от ссылок?
А если представить себе ещё одно неправильное использование такой структуры блокировки: она незаметно для программиста (ну спешил человек или устал просто и не заметил) попадает во вложенные операторные скобки, а на самом деле должна блокировать всю функцию. Вот вам ещё одна ошибка, которую надо искать.... Правда тогда нужно делать функцию, а потом её обернуть ещё одной с синхронизацией чтобы точно никаких ошибок не было.... а это в C++ будет уже не удобно, скорее всего
Здравствуйте, superman, Вы писали:
S>В прошлом я неоднократно использовал такое в своей работе, соглашусь что это было не самым элегантным, но удовлетворительным и единственным доступным мне тогда решением.
А чем в том случае указатели не подходили?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, superman, Вы писали:
S>мы тут на днях встретили в одной библиотеке такой перл:
такое ощущение, что тот кто это писал не подозревал о существовании указателей.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, pavel_turbin, Вы писали:
_>Вообще, человек, который говорит, что ссылки не нужны, т.к. их можно заменить указателями -- это скорее "C", а не C++ программист
ИМХО каждый инструмент к своему месту. Тут в большей части примеров ссылки притянуты за уши. Указатель там подошел бы больше.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
FFF>Мы те, кому 26-35 — подростковый период провели тогда, когда компьютер — был вещью из мечт, когда приходилось работать и выкручиваться из тех условий, что были когда-то, и паять свой первый Спектрум, изобретать при программировании и главное думать... Была Романтика и самостоятельное желание искать материал, которого было крайней мало — когда книжку передавали из рук в руки... А сейчас всякого хлама написано столько, что стоящие вещи в них теряются... А юниоры тонут в этом объеме хлама... и как следствие — знания хлама есть, знания основ и понимание их — нет...
Что-то мне это очень напоминает... из юмора
А что вы считаете пониманием?
P.S. Вы знаете, у меня тоже не было компьютера и учился программировать я сначала по книгам, а затем уже (через несколько лет) мне его подарили...
так что и в наши дни компьтер — это романтика. Только вот что-то мне не хочется тратить свою жизнь на изучение того, что мне абсолютно не нужно и легко можно заменить другой вещью из этого же языка. По моему, как раз речь идёт о хламе.
Да и языков и библиотек столько, что непонятно, что учить и насколько глубоко
Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, superman, Вы писали:
S>>мы тут на днях встретили в одной библиотеке такой перл: CC>такое ощущение, что тот кто это писал не подозревал о существовании указателей.
Такое впечатление, что он вообще не подозревал о том, как ссылки и указатели компилируются в реальный код и чем они друг от друга отличаются
Здравствуйте, Kubyshev Andrey, Вы писали:
KA>Читаю эту ветку находясь в отпуске на море... И знаете, такое чуство возникает, что возня какая то у вас там в Москве нездоровая KA>Не то что бы я там че то, просто я к тому что оторвите взгляд от компа, типа повертите в разные стороны и все такое... KA>А вы опять за свои копи-конструкторы, констатные методы и прочее ...
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, pavel_turbin, Вы писали:
FDS>>>Можно ссылочку (на открытый проект) на пример реального кода, где используются ссылки как поля объектов.
_>>Элементарно.
FDS>Чем не нравится так: FDS>
Понимаете — настоящему программисту все равно на каком языке писать...
Мне же вот ничего не мешает писать на C++ сервер, который получает звук с Flash компоненты на сайте (тут пишу на AS2), через Red5 — тут надо писать на Java и транслирует его на сервер, и обратно выдает синтетическое видео с анимацией.
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, sc, Вы писали:
D>>>Причём ещё до начала работы с ним. sc>>Это точно Спешил. Но надеюсь все поняли, что я имел ввиду
FDS>Вот, видите какой вред от ссылок?
FDS>А если представить себе ещё одно неправильное использование такой структуры блокировки: она незаметно для программиста (ну спешил человек или устал просто и не заметил) попадает во вложенные операторные скобки, а на самом деле должна блокировать всю функцию. Вот вам ещё одна ошибка, которую надо искать.... Правда тогда нужно делать функцию, а потом её обернуть ещё одной с синхронизацией чтобы точно никаких ошибок не было.... а это в C++ будет уже не удобно, скорее всего
В данном случае, если ссылку заменить на указатель, вред точно такой же
Почему же указатели хуже? Потому что Гугл на запрос "pointers are evil" выдает 554 ссылки а на "references are evil" всего 10
Здравствуйте, FDSC, Вы писали:
CC>>такое ощущение, что тот кто это писал не подозревал о существовании указателей.
FDS>Такое впечатление, что он вообще не подозревал о том, как ссылки и указатели компилируются в реальный код и чем они друг от друга отличаются FDS>
да нет. могу предположить что просто сначала был только один конструктор, который брал сцылку — то есть предполаголось что обьект Foo нужен — дальше некуда, а потом родилась идея что его и без сцылки на Foo как-то использовать можно, и порефакторили его кривовато от и всё. OpenSorce проект
Здравствуйте, Kubyshev Andrey, Вы писали:
KA>Читаю эту ветку находясь в отпуске на море... И знаете, такое чуство возникает, что возня какая то у вас там в Москве нездоровая KA>Не то что бы я там че то, просто я к тому что оторвите взгляд от компа, типа повертите в разные стороны и все такое... KA>А вы опять за свои копи-конструкторы, констатные методы и прочее ...
ты решил это везде запостить? Надеюсь программку то хоть написал?
Здравствуйте, FDSC, Вы писали:
S>>А умение понимать чужой код у нас теперь типа не котируется? Если в программе этих ссылок как грязи, а человек не понимает ни списков инициализации, ни ссылок — как он будет в ней разбираться?
FDS>А вы его ему кода не давали, вы просили его написать. Разница принципиальная, согласитесь
Мне надо, чтобы человек знал, что такое списки инициализации. Чтобы он знал, чем отличается
C::C(const B *s) : x_(b)
{}
от
C::C(const B *s)
{
x_.assign(s);
}
и знал, почему первый вариант предпочтительнее. Чтобы он не догадался о существовании списков инициализации и об этом отличии на собеседовании, а у него в подкорке уже было проштамповано, что по умолчанию надо выбирать первый вариант. Чтобы он не думал, что писать, i++ или ++i, а первый вариант выбирал бы только в том случае, если ему в данном куске кода действительно нужно знать, что было в i до инкремента. А не писал по привычке i++. Привычка должна быть другая — писать по умолчанию ++i. Чтобы человек не забывал писать explicit, определив в классе конструктор конверсии. Чтобы он не писал код вида:
C::C()
{
x = new K;
y = new L;
}
C::~C()
{
delete x;
delete y;
}
Чтобы написав в деструкторе delete, не забывал запретить (или определить) у класса конструктор копирования и оператор присваивания.
А вы говорите — "ах, про ссылки спросили! звери, не иначе!".
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, pavel_turbin, Вы писали:
FDS>Лично моё мнение: собственно, а чем ссылки лучше константных указателей? Я тут где-то показывал эквивалентный код на указателях, заменяющий ссылку. Чем вам указатели не нравятся? Для тех же объектов синхронизации ведь совершенно без разницы, будете вы туда ссылку передавать или запоминать адрес в константный указатель.
FDS>Или я где-то чего-то не понимаю?
имхо, то, что ты предложил оригинально но малость безполезно.
в этом случае присутствуют те же самые недостатки что и при использовании ссылки:
1. объект, на который мы ссылаемся, может быть уже удалён, а мы и не заметим этого
2. объект нашего класса нельзя скопировать (использовать operator=)
3. лишние движения (передать по ссылке, сохранить взятый адрес) — просто лишний раз запутывают
ИМХО та проблема, которую ты пытаешся решить.. Повторюсь, она оригинальна, но собственно говоря малозначима, если вообще хоть сколько-нибудь значима. я не могу придумать такого варианта использзования, где нам было бы важно содержим мы этот объект или только ссылаемся не него.
и ещё.. четвёртый недостаток. В самих методах класа, содержащего указатель, ты должен либо положиться на то что указатель обязательно проинициализирован конструктором или постоянно проверять, а проинициализирован ли он. ссылка бы обеспечила бы нам уверенность что она проинициализированна.. собственно в этом и вся разница, и все её приимущества.
По-моему, как раз очень неудачный вопрос. Проблема этого кода в том, что он ill-formed (с первого беглого взгляда бросается в глаза void main). Как все это сделать правильно? Да очень просто: int main() {} (со второго беглого взгляда видно, что никакого observable behavior тут и быть не могло).
Здравствуйте, FDSC, Вы писали:
FDS> Только вот что-то мне не хочется тратить свою жизнь на изучение того, что мне абсолютно не нужно и легко можно заменить другой вещью из этого же языка. По моему, как раз речь идёт о хламе.
минус много
FDS>Да и языков и библиотек столько, что непонятно, что учить и насколько глубоко
S>а потом возникают вопросы о проблемах с понимением молодых програмистов
Инетерсно, вы нечаянно написали 3-ю "н", или нечаянно заменили "а" на "е"?
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Здравствуйте, elcste, Вы писали:
S>> Хуже вопрос только про ++i++ и скобки
E>А в чем, если не секрет, этот вопрос заключается?
Да как обычном — скомпилируется или нет, почему, как расставить скобки чтобы скомпилировалось. Пустая трата времени в общем.
E>По-моему, как раз очень неудачный вопрос. Проблема этого кода в том, что он ill-formed (с первого беглого взгляда бросается в глаза void main). Как все это сделать правильно? Да очень просто: int main() {} (со второго беглого взгляда видно, что никакого observable behavior тут и быть не могло).
В том контексте, в котором этот вопрос использется у Яндекса — действительно не очень удачный вопрос. Потому что слишком много букв придется соискателю набирать А вот для того, чтобы в ходе беседы определить, как хорошо кандидат замечает баги в чужом коде и вообще насколько критически мыслит — очень даже подходит.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, 0x8000FFFF, Вы писали:
FFF>Человек не знающий основных паттернов, смартпоинтеров и интрузивных контейнеров не может считаться опытным программистом, а значит у него недостаток опыта.
Не знает этих вещей, или не знает их названий?
Опытный программист вполне может не ответить на вопрос "назовите 15 основный паттернов", хотя на практике использовал их все.
Просто он узнал о них не из книжки банды.
Здравствуйте, Eugeny__, Вы писали:
E__>Здравствуйте, superman, Вы писали:
S>>а потом возникают вопросы о проблемах с понимением молодых програмистов
E__>Инетерсно, вы нечаянно написали 3-ю "н", или нечаянно заменили "а" на "е"?
Здравствуйте, Sergey, Вы писали:
S>Чтобы он не думал, что писать, i++ или ++i, а первый вариант выбирал бы только в том случае, если ему в данном куске кода действительно нужно знать, что было в i до инкремента. А не писал по привычке i++. Привычка должна быть другая — писать по умолчанию ++i.
Ни разу в жизни не использовал ++i. Всегда i++. Жизнь кончена! Пойду в грузчики
Здравствуйте, Sergey, Вы писали:
S>>> Хуже вопрос только про ++i++ и скобки E>>А в чем, если не секрет, этот вопрос заключается?
S>Да как обычном — скомпилируется или нет, почему, как расставить скобки чтобы скомпилировалось. Пустая трата времени в общем.
А, т.е. про то, как сделать well-formed... Потому как undefined behavior все равно останется.
S>В том контексте, в котором этот вопрос использется у Яндекса — действительно не очень удачный вопрос. Потому что слишком много букв придется соискателю набирать А вот для того, чтобы в ходе беседы определить, как хорошо кандидат замечает баги в чужом коде и вообще насколько критически мыслит — очень даже подходит.
Да, тут согласен. Разработка простого класса с владением какими-то ресурсами — хорошая тема для устной беседы.
Здравствуйте, superman, Вы писали:
S>хм.. чисто ради любопытства, а что ты об ссылках думаеш?
Первое мое знакомство со ссылками состоялось в глубоком детстве, когда я в школе проходил рассказ про В.И.Ленина, который в ссылке прятал революционные книжки от жандармов. Но это высший пилотаж. Я до сих пор не понимаю, как можно спрятать в ссылке революционные книжки. И не смог бы ответить на такой вопрос на собеседовании.
А так, вообще, чего о них думать? Ссылки — они и есть ссылки. Одна из конструкций языка, временами удобная.
Здравствуйте, elcste, Вы писали:
E>Проблема этого кода в том, что он ill-formed (с первого беглого взгляда бросается в глаза void main).
Вот любопытно: чего бОльшая часть народу цепляется именно к несчастному void main () тогда как реально критичные ошибки опускаются "на потом"?
E> Как все это сделать правильно? Да очень просто: int main() {}
Занудство!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, Sergey, Вы писали:
S>а у него в подкорке уже было проштамповано, что по умолчанию надо выбирать первый вариант.
ААААА!!!! Все пропало!!! А я списки пользую только тогда когда без них никак не написать
S> Чтобы он не думал
Программист, который не думает должен быть утилизирован, ИМХО
S> что писать, i++ или ++i, а первый вариант выбирал бы только в том случае, если ему в данном куске кода действительно нужно знать, что было в i до инкремента. А не писал по привычке i++. Привычка должна быть другая — писать по умолчанию ++i.
У меня для POD типов при наличии нормального компилера привычка писать постфиксный вариант как более удобный.
S> Чтобы человек не забывал писать explicit, определив в классе конструктор конверсии. Чтобы он не писал код вда: S>Чтобы написав в деструкторе delete, не забывал запретить (или определить) у класса конструктор копирования и оператор присваивания.
Ну, тут претензий никаких... Вопрос "чистоплотности" кода..
Скажите дохтур, я обречен?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, CreatorCray, Вы писали:
E>>Проблема этого кода в том, что он ill-formed (с первого беглого взгляда бросается в глаза void main). CC>Вот любопытно: чего бОльшая часть народу цепляется именно к несчастному void main () тогда как реально критичные ошибки опускаются "на потом"?
Так ведь это первое, что бросается в глаза. Зачем смотреть на остальное, если уже есть ответ?
E>> Как все это сделать правильно? Да очень просто: int main() {} CC>Занудство!
Занудство, да. А что Вы предлагаете? Считать ошибки? Так их насчитать можно бесконечно много — никто же не знает, что этот код должен был делать по замыслам его автора. Телепаты в отпуске, ага.
Здравствуйте, elcste, Вы писали:
Да очень просто: int main() {} (со второго беглого взгляда видно, что никакого observable behavior тут и быть не могло).
Или хотя бы #define void int
По-моему, изящно получилось. Это вам не ссылки инициализировать. Так программы писать, чтобы они при этом не глючили — вот настоящее мастерство, и сразу видна старая школа!
Здравствуйте, elcste, Вы писали:
E>>>Проблема этого кода в том, что он ill-formed (с первого беглого взгляда бросается в глаза void main). CC>>Вот любопытно: чего бОльшая часть народу цепляется именно к несчастному void main () тогда как реально критичные ошибки опускаются "на потом"? E>Так ведь это первое, что бросается в глаза. Зачем смотреть на остальное, если уже есть ответ?
Ответ неправильный кста. Код хреновый не потому что void main () — вполне может быть что код писан был под VC6
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, elcste, Вы писали:
E>>Проблема этого кода в том, что он ill-formed (с первого беглого взгляда бросается в глаза void main). CC>Вот любопытно: чего бОльшая часть народу цепляется именно к несчастному void main () тогда как реально критичные ошибки опускаются "на потом"?
А я, когда увидел код, прицепился к delete i и невиртуальному деструктору... только потом сообразил, что в коде ещё и main есть
Здравствуйте, FDSC, Вы писали:
FDS>Ну дак вы же после ссылки уже отправите, до констант даже не дойдёт...
Там где я собеседовал, был некоторый минимум вопросов который задавался всегда, после него уже принималось решение о целесообразности продолжения.
так что после ссылки был бы еще один шанс.
ну а с константами вроде все правильно, сonst метод не может модифицировать объект за исключением грубой силы типа const_cast<A*>(this) или совершенно честных mutable полей ...
Здравствуйте, pavel_turbin, Вы писали:
FDS>>Чем это хуже?
_>только тем, что компилятор не проверяет наличие инициализации существующим объектом.
_>в вашем примере ни кто не мешает написать
_>
_>ScopedLocker<что-то> Locker(0); // будет компилиться
_>
Да, тут труба, ваш код с дефолтным конструктором не компилируется
Error 1 error C2758: 'ScopedLocker::m_synch' : must be initialized in constructor base/member initializer list f:\prg\tmp\070530cpplinks\cpplinks\cpplinks.cpp 29
Здравствуйте, superman, Вы писали:
S>ИМХО та проблема, которую ты пытаешся решить.. Повторюсь, она оригинальна, но собственно говоря малозначима, если вообще хоть сколько-нибудь значима. я не могу придумать такого варианта использзования, где нам было бы важно содержим мы этот объект или только ссылаемся не него.
Нам это не важно, но это лишнее напоминание программисту, что это поле вовсе не внутренний объект, а именно указатель на ВНЕШНИЕ данные. Если программист это забудет, он может в итоге долго копаться в коде, не понимая, где же у него баг. А ссылка как раз способствует такому забыванию
S>и ещё.. четвёртый недостаток. В самих методах класа, содержащего указатель, ты должен либо положиться на то что указатель обязательно проинициализирован конструктором или постоянно проверять, а проинициализирован ли он. ссылка бы обеспечила бы нам уверенность что она проинициализированна.. собственно в этом и вся разница, и все её приимущества.
Здравствуйте, Sergey, Вы писали:
S>Здравствуйте, FDSC, Вы писали:
S>>>А умение понимать чужой код у нас теперь типа не котируется? Если в программе этих ссылок как грязи, а человек не понимает ни списков инициализации, ни ссылок — как он будет в ней разбираться?
FDS>>А вы его ему кода не давали, вы просили его написать. Разница принципиальная, согласитесь
S>Мне надо, чтобы человек знал, что такое списки инициализации. Чтобы он знал, чем отличается
S>
S>C::C(const B *s) : x_(b)
S>{}
S>
S>от S>
S>C::C(const B *s)
S>{
S> x_.assign(s);
S>}
S>
S>и знал, почему первый вариант предпочтительнее.
b — это у нас что такое? s что ли? И почему первый вариант предпочтительнее?
S>Чтобы он не догадался о существовании списков инициализации и об этом отличии на собеседовании, а у него в подкорке уже было проштамповано, что по умолчанию надо выбирать первый вариант.
Обращайтесь на кафедру систем пластического деформирования
S> Чтобы он не думал, что писать, i++ или ++i, а первый вариант выбирал бы только в том случае, если ему в данном куске кода действительно нужно знать, что было в i до инкремента. А не писал по привычке i++. Привычка должна быть другая — писать по умолчанию ++i
Так, а чем вам i++ не угодило то? Честно скажу, когда я вижу ++i всегда заменяю на i++, потому что ++i раздражает
FDS>Нам это не важно, но это лишнее напоминание программисту, что это поле вовсе не внутренний объект, а именно указатель на ВНЕШНИЕ данные. Если программист это забудет, он может в итоге долго копаться в коде, не понимая, где же у него баг. А ссылка как раз способствует такому забыванию
ИМХО глупости. во первых не на ДАННЫЕ а на ОБЪЕКТ. внешний или внутрениий — без разницы. Вы пытаетесь решить несуществующую проблему.
S>>и ещё.. четвёртый недостаток. В самих методах класа, содержащего указатель, ты должен либо положиться на то что указатель обязательно проинициализирован конструктором или постоянно проверять, а проинициализирован ли он. ссылка бы обеспечила бы нам уверенность что она проинициализированна.. собственно в этом и вся разница, и все её приимущества.
FDS>Проверять не надо FDS>Об этом писал здесь http://rsdn.ru/forum/message/2508595.1.aspx
Да глупости, надо проверять, надо!
ты показал как в Конструкторе сделать так что бы в конструкторе не надо было проверять. да согласен, выход. А в другом методе который пытается этот указатель использовать? а ей может кто-то гарантировать что завтра не будет изменён конструктор котороый вчера гарантировал инициализацию?
Здравствуйте, 0x8000FFFF, Вы писали:
FFF>Понимаете — настоящему программисту все равно на каком языке писать...
FFF>Мне же вот ничего не мешает писать на C++ сервер, который получает звук с Flash компоненты на сайте (тут пишу на AS2), через Red5 — тут надо писать на Java и транслирует его на сервер, и обратно выдает синтетическое видео с анимацией.
И? Что из этого следует? Мне то же приходилось использовать в одном приложении два языка. Но что из этого? Тем более, это означает, что программист просто не успеет изучить тонкости работы все языков
Здравствуйте, superman, Вы писали:
S>Здравствуйте, FDSC, Вы писали:
FDS>>Нам это не важно, но это лишнее напоминание программисту, что это поле вовсе не внутренний объект, а именно указатель на ВНЕШНИЕ данные. Если программист это забудет, он может в итоге долго копаться в коде, не понимая, где же у него баг. А ссылка как раз способствует такому забыванию
S>ИМХО глупости. во первых не на ДАННЫЕ а на ОБЪЕКТ. внешний или внутрениий — без разницы. Вы пытаетесь решить несуществующую проблему.
Я считаю, что разница есть. Если объект внешний, программисту хотя бы бросится в глаза, если где-то будет несанкционированное изменение, что это именно указатель. А так, кто его знает, приватный объектик, может он только внутри класса и используется и создаётся. Это грабли
S>>>и ещё.. четвёртый недостаток. В самих методах класа, содержащего указатель, ты должен либо положиться на то что указатель обязательно проинициализирован конструктором или постоянно проверять, а проинициализирован ли он. ссылка бы обеспечила бы нам уверенность что она проинициализированна.. собственно в этом и вся разница, и все её приимущества.
FDS>>Проверять не надо FDS>>Об этом писал здесь http://rsdn.ru/forum/message/2508595.1.aspx
S>Да глупости, надо проверять, надо! S>ты показал как в Конструкторе сделать так что бы в конструкторе не надо было проверять. да согласен, выход. А в другом методе который пытается этот указатель использовать?
Зачем там его проверять? Если конструктор гарантирует, дальше будет всё нормально: указатель-то константный
Обрати внимание на слова const, я в main специально привёл попытку обнулить указатель
S> а ей может кто-то гарантировать что завтра не будет изменён конструктор котороый вчера гарантировал инициализацию?
Это ошибка, ну дак на то он и конструктор, что бы гарантировать
Здравствуйте, FDSC, Вы писали:
S>> а ей может кто-то гарантировать что завтра не будет изменён конструктор котороый вчера гарантировал инициализацию?
FDS>Это ошибка, ну дак на то он и конструктор, что бы гарантировать
P.S. Кстати, инициализация-то всё равно будет гарантированно. Другой вопрос, что указатель может быть инициализирован нулём
FDS>Так, а чем вам i++ не угодило то? Честно скажу, когда я вижу ++i всегда заменяю на i++, потому что ++i раздражает
потому что в общем случае постинкр. подразумевает копирование
Здравствуйте, FDSC, Вы писали:
FDS> Так, а чем вам i++ не угодило то? Честно скажу, когда я вижу ++i всегда заменяю на i++, потому что ++i раздражает
эстет!
а должно раздражать i++ !
это менее эфективно т.к. требует сохранения старого состояния i. стоит оговориться, что для фундаментальных типов это ниразу не проблема — компилятор должен бы соптимизировать и поменять назад на ++i, а вот для нефундаментальных увы и ах.. компилятор не осилит.
Здравствуйте, FDSC, Вы писали:
FDS>А я, когда увидел код, прицепился к delete i и невиртуальному деструктору... только потом сообразил, что в коде ещё и main есть
Ну вот: один правильный человек уже есть
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, superman, Вы писали:
S>>Здравствуйте, FDSC, Вы писали:
S>>>>и ещё.. четвёртый недостаток. В самих методах класа, содержащего указатель, ты должен либо положиться на то что указатель обязательно проинициализирован конструктором или постоянно проверять, а проинициализирован ли он. ссылка бы обеспечила бы нам уверенность что она проинициализированна.. собственно в этом и вся разница, и все её приимущества.
FDS>>>Проверять не надо FDS>>>Об этом писал здесь http://rsdn.ru/forum/message/2508595.1.aspx
S>>Да глупости, надо проверять, надо! S>>ты показал как в Конструкторе сделать так что бы в конструкторе не надо было проверять. да согласен, выход. А в другом методе который пытается этот указатель использовать?
FDS>Зачем там его проверять? Если конструктор гарантирует, дальше будет всё нормально: указатель-то константный FDS>Обрати внимание на слова const, я в main специально привёл попытку обнулить указатель
млин, а если Вася пупкин завтра перепишет твой конструктор? или добавит ещё один который такой гаринтии давать не будет?
S>> а ей может кто-то гарантировать что завтра не будет изменён конструктор котороый вчера гарантировал инициализацию?
FDS>Это ошибка, ну дак на то он и конструктор, что бы гарантировать
Здравствуйте, superman, Вы писали:
S>млин, а если Вася пупкин завтра перепишет твой конструктор? или добавит ещё один который такой гаринтии давать не будет?
А если вася пупкин перепишет твой конструктор так что все сломаеццо.
Это сродни вопросу "а что будет если программа будет работать неправильно?"
А если вася пупкин в ваш класс добавит конструктор по умолчанию и там ссылку проинитит адресом локальной переменной или вообще *NULL
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, superman, Вы писали:
S>>млин, а если Вася пупкин завтра перепишет твой конструктор? или добавит ещё один который такой гаринтии давать не будет? CC>А если вася пупкин перепишет твой конструктор так что все сломаеццо. CC>Это сродни вопросу "а что будет если программа будет работать неправильно?" CC>А если вася пупкин в ваш класс добавит конструктор по умолчанию и там ссылку проинитит адресом локальной переменной или вообще *NULL
всё, я умываю руки.
Сцылки это зло и излишество, а пароль ко всем сервакам пентагона "QWWERTY" и "Mao Tcedun"
Здравствуйте, superman, Вы писали:
S>Здравствуйте, CreatorCray, Вы писали:
CC>>Здравствуйте, superman, Вы писали:
S>>>млин, а если Вася пупкин завтра перепишет твой конструктор? или добавит ещё один который такой гаринтии давать не будет? CC>>А если вася пупкин перепишет твой конструктор так что все сломаеццо. CC>>Это сродни вопросу "а что будет если программа будет работать неправильно?" CC>>А если вася пупкин в ваш класс добавит конструктор по умолчанию и там ссылку проинитит адресом локальной переменной или вообще *NULL
S>всё, я умываю руки. S>Сцылки это зло и излишество, а пароль ко всем сервакам пентагона "QWWERTY" и "Mao Tcedun"
Гык. Ну согласитесь, что передать NULL в конструктор надо умудрится ещё, а тем более, там на нуль не проверить
> S>а у него в подкорке уже было проштамповано, что по умолчанию надо выбирать первый вариант. > ААААА!!!! Все пропало!!! А я списки пользую только тогда когда без них никак не написать
Ну если не смущает, что при этом зря отрабатывают дефолтные конструкторы — то можно продолжать писать в том же стиле.
> S> Чтобы он не думал > Программист, который не думает должен быть утилизирован, ИМХО
А оппонент, вырывающий цитаты из контекста, должен быть утилизирован с особой жестокостью...
> S> что писать, i++ или ++i, а первый вариант выбирал бы только в том случае, если ему в данном куске кода действительно нужно знать, что было в i до инкремента. А не писал по привычке i++. Привычка должна быть другая — писать по умолчанию ++i. > У меня для POD типов при наличии нормального компилера привычка писать постфиксный вариант как более удобный.
Путать POD и встроенные типы — это тоже в порядке вещей. А чем постфиксный вариант удобней, если не секрет?
> Скажите дохтур, я обречен?
Дохтур прописывает дотнет и жабу
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Hi
P>вопрос про ссылки ЭЛЕМЕНТАРНЫЙ — и если человек не знает, не может догадать или вывести гуся из опыта — это серьезный звонок. И можно воздержаться от бездоказательных утверждений типа — "по вашей вине столько хороших сотрудников" ...
P>Во первых — хороший сотрудник должен писать хороший код, а это невозможно без знания языка ... P>Во вторых к ссылкам можно еще добавить const-модификаторы, некоторые "профессионалы" не понимают когда и зачем его использовать и не видят разницы между ...
P>А это уже реальный косяк! .. =)
Не слишком. Полгода поработав на другом языке, подобную мелочевку (а это именно мелочевка, непринципиальные фичи) можно и забыть.
P>и понимание основных механизмов языка (в мсдн-е не дают) это не тоже самое что и знание кактой то апишной функции которую действительно можно посмотреть в справочнике ....
Основные механизмы в C++ в точности те же, что и в обычном Си. От слова "основные". Все остальное — дополнительные и необязательные фичи. В некоторых компаниях они возводятся в фетиш и активно разбавляются не менее интересными внешними инструментами а-ля буст. В некоторых других компаниях значительная часть фич языка (вплоть до stl) просто запрещается к использованию, и никаких катастроф от этого не происходит. Это не самые существенные детали, и уж тем более не основы.
Я иногда принимаю экзамены по c++ для студентов, которые в силу бытия студентами знать его даже наполовину не могут в принципе. Из них многие легко ответят на ваши вопросы, а потом некоторые напишут вот это:
Это миф, придуманный теми, кто просто в силу своего уровня не в состоянии понять... Это тоже самое, что сказать, что не возможно познать всю математику в университете (а там не меньше, а я бы сказал больше информации)... Я уверен в этом, потому что всё между собой тесно связанно и одно из другого вытекает... если заниматься делом не абы как, а с фундаментальным подходом — то все можно познать.
Здравствуйте, CreatorCray, Вы писали:
E>>>>Проблема этого кода в том, что он ill-formed (с первого беглого взгляда бросается в глаза void main). CC>>>Вот любопытно: чего бОльшая часть народу цепляется именно к несчастному void main () тогда как реально критичные ошибки опускаются "на потом"? E>>Так ведь это первое, что бросается в глаза. Зачем смотреть на остальное, если уже есть ответ?
CC>Ответ неправильный кста. Код хреновый не потому что void main () — вполне может быть что код писан был под VC6
Каким образом существование Microsoft® Visual® C++ 6.0 влияет на ill-formedness указанного текста согласно ANSI ISO/IEC 14882:2003?
Здравствуйте, sc, Вы писали:
FDS>>А если представить себе ещё одно неправильное использование такой структуры блокировки: она незаметно для программиста (ну спешил человек или устал просто и не заметил) попадает во вложенные операторные скобки, а на самом деле должна блокировать всю функцию. Вот вам ещё одна ошибка, которую надо искать.... Правда тогда нужно делать функцию, а потом её обернуть ещё одной с синхронизацией чтобы точно никаких ошибок не было.... а это в C++ будет уже не удобно, скорее всего
sc>В данном случае, если ссылку заменить на указатель, вред точно такой же :) sc>Почему же указатели хуже? Потому что Гугл на запрос "pointers are evil" выдает 554 ссылки а на "references are evil" всего 10 :)
Это напоминает мне «Как заработать миллион» и тот, второй, запрос с BOR.
Ссылки можно рассматривать как недоуказатели: не умеют менять адрес того, на что указывают, не бывают NULL. В этом-то и прелесть. Чем меньше, тем лучше. Надо будет, использую указатель — boost::reference_wrapper хранит данные отнюдь не в ссылке! А если хватит ссылки, воспользуюсь ей и наступлю на меньшее количество грабель.
_>Известно, что ссылку нельзя переназначить и ссылка всегда должна быть инициализированная.
_>
_>struct ABC
_>{
_> int &a;
_>};
_>
_>может ли существовать такой тип ABC, вообще? Если программист "с лету" говорит "Да, проблем нет." Тогда что делать с правилом инициализации ссылки? Тут можно многое спросить еще, про дефолтный конструктор, как его генерируют и пр. Такие вопросы нужны что-бы отфильтровать шлак и посмотреть видел ли человек C++ вообще.
FFF>Это миф, придуманный теми, кто просто в силу своего уровня не в состоянии понять... Это тоже самое, что сказать, что не возможно познать всю математику в университете (а там не меньше, а я бы сказал больше информации)...
Возьмите любого студента через 2-3 года после окончания университета. Много он той математики вспомнит, если его дальнейшая работа не была с ней связана? Хорошо, если из каждого раздела по нескольку основных определений и теорем будет помнить. Так же и программист: если ему не приходилось использовать какую-то грань языка С++ в работе, то он вполне может ее наизусть не помнить. Хотя иметь при этом солидный опыт и хорошо писать программы.
Хороший программист — это не тот, кто хорошо знает редкие и малоиспользуемые конструкции языка, а тот, кто хорошо умеет использовать простые и распространенные. А если ему понадобится использовать что-то, что он не знает, то потратит десять минут и изучит, делов то.
Здравствуйте, Roman Odaisky, Вы писали:
RO>Ссылки можно рассматривать как недоуказатели: не умеют менять адрес того, на что указывают, не бывают NULL. В этом-то и прелесть. Чем меньше, тем лучше. Надо будет, использую указатель — boost::reference_wrapper хранит данные отнюдь не в ссылке! А если хватит ссылки, воспользуюсь ей и наступлю на меньшее количество грабель.
Спор начался с того, что ссылка сама — грабли, так как по её использованию не видно, ссылка это или реальный объект
Здравствуйте, 0x8000FFFF, Вы писали:
FFF>Это миф, придуманный теми, кто просто в силу своего уровня не в состоянии понять... Это тоже самое, что сказать, что не возможно познать всю математику в университете (а там не меньше, а я бы сказал больше информации)...
Невозможно. Иначе бы не было восхищений, когда профессионалы встречают человека, очень хорошо разбирающегося в нескольких различных областях математики, физики и т.п. Большинство профессионалов хорошо изучают и понимают только свою область
FFF>Я уверен в этом, потому что всё между собой тесно связанно и одно из другого вытекает... если заниматься делом не абы как, а с фундаментальным подходом — то все можно познать.
Ну, я вот сейчас сопроматом занимаюсь. Стандартный курс сопромата сдал на 5. Вы думаете, что я понимал то, за что получил 5? Да не фига! Мне потребовалось 1,5 года занятий по нелинейной теории чтобы наконец-то понять, что же там было.
Так что не думаю, что объём каких-либо курсов в ВУЗе — это аргумент
Здравствуйте, FDSC, Вы писали:
FDS>Не понял. FDS>i здесь — приватная переменная
Так класс писал ты, потом его правило еще десяток человек, и он достался мне
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, FDSC, Вы писали:
FDS>>Не понял. FDS>>i здесь — приватная переменная LM>Так класс писал ты, потом его правило еще десяток человек, и он достался мне
И?
Как раз для этого я и говорю, что указатели лучше. Потому что про ссылку можно забыть, что она ссылка, а указатель — он сразу видно, что указатель
Не знаю, что будет от разыменования целочисленной переменной, но, думаю, не больше проблем, чем от случайной замены объекта по ссылке на другой объект
Здравствуйте, FDSC, Вы писали:
FDS>Как раз для этого я и говорю, что указатели лучше. Потому что про ссылку можно забыть, что она ссылка, а указатель — он сразу видно, что указатель
А мне крысу достаточно навести, чтобы узнать что это ссылка, а чтобы узнать может ли этот указатель быть нулевым придется по коду полазить
FFF>>Я уверен в этом, потому что всё между собой тесно связанно и одно из другого вытекает... если заниматься делом не абы как, а с фундаментальным подходом — то все можно познать.
FDS>Ну, я вот сейчас сопроматом занимаюсь. Стандартный курс сопромата сдал на 5. Вы думаете, что я понимал то, за что получил 5? Да не фига! Мне потребовалось 1,5 года занятий по нелинейной теории чтобы наконец-то понять, что же там было.
Ну вот видите — как все между собой связано — в программирование все тоже самое...
В общем, топик скоро начнет соответствовать всем критериям помещения в священные войны, поэтому развивать спор я тут не буду.
Просто к слову. Сейчас в кабинете напротив сидит человек, который 3 недели назад не знал ни C, ни C++ вообще.
В силу специфики нашей коданды мы постоянно работаем с огромным количеством чужого кода и вписываем свою функциональность туда. Этот код написан в разном стиле и использует несколько языков (главным образом C++), а также внутренний API, который не документирован нигде.
За три недели человек проделал объем работы, который удивил всю команду. Вчера я делал code-review его кода. Код идеально соответсвует духу соответсвующих приложений, я нашел 6 стилистических проблем в коде, который занимал несколько десятков экранов.
Здравствуйте, DKM_MSFT, Вы писали:
DKM>Просто к слову. Сейчас в кабинете напротив сидит человек, который 3 недели назад не знал ни C, ни C++ вообще.
DKM>В силу специфики нашей коданды мы постоянно работаем с огромным количеством чужого кода и вписываем свою функциональность туда. Этот код написан в разном стиле и использует несколько языков (главным образом C++), а также внутренний API, который не документирован нигде.
DKM>За три недели человек проделал объем работы, который удивил всю команду. Вчера я делал code-review его кода. Код идеально соответсвует духу соответсвующих приложений, я нашел 6 стилистических проблем в коде, который занимал несколько десятков экранов.
DKM>Вот это я называю — Хороший Программист.
Здравствуйте, pavel_turbin, Вы писали:
_>Далее, это правило наталкивает на обсуждения, можно по размышлять что тогда делать с такой конструкцией
_>
_>struct ABC
_>{
_> int &a;
_>};
_>
_>может ли существовать такой тип ABC, вообще? Если программист "с лету" говорит "Да, проблем нет." Тогда что делать с правилом инициализации ссылки? Тут можно многое спросить еще, про дефолтный конструктор, как его генерируют и пр. Такие вопросы нужны что-бы отфильтровать шлак и посмотреть видел ли человек C++ вообще.
Я честно говоря не помню что сказано в писании и мне лень там копаться но как насчет такого кода:
struct ABC
{
int& a;
};
int a = 123;
ABC abc = { a };
int main()
{
std::cout << abc.a << std::endl;
}
По мнению Comeau C/C++ это предупреждение:
"ComeauTest.c", line 1: warning: class "ABC" defines no constructor to initialize
the following:
reference member "ABC::a"
struct ABC
^
VC++8 даже и предупреждения не выдал. А просто скомпилил и отработал как ожидалось.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Sergey, Вы писали:
S>Видел я код, который такие люди пишут. Говнище типа MFC или ATL'я из VC6. if (error) goto cleanup, ага.
Для С++ согласен. Тут лучше обертки с деструкторами.
Но для С это единственный читабельный вариант.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Roman Odaisky, Вы писали:
CC>>Ответ неправильный кста. Код хреновый не потому что void main () — вполне может быть что код писан был под VC6 RO>Каким образом существование Microsoft® Visual® C++ 6.0 влияет на ill-formedness указанного текста согласно ANSI ISO/IEC 14882:2003?
Ты не понял. Впрочем и я не сильно внятно выразился.
Я не про то, что void main() есть гут и допустимо. Я про то, что это самое меньшее из бед, с которым можно столкнуться. А народ почему то вместо того чтоб обращать внимание на реально серьезные ошибки разводит кучу писанины про void main().
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, FDSC, Вы писали:
FDS>Спор начался с того, что ссылка сама — грабли, так как по её использованию не видно, ссылка это или реальный объект
IMHO не совсем так: речь шла про то, что ссылка в данном конкретном примере — грабли.
А так ссылки есть гут.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
P>Но вот человек которые не может сказать сколько у class A {}; конструкторов желаемого места явно не получил бы ...
P>Опять же есть вопросы такого рода: P>1. Неявное преобразование типов P>2. Поиск наилучшего матча для шаблонных функций...
P>готов спорить что без подготовки никто не ответит полно и правильно ... вопрос нужно не нужно оставляю открытым ...
Только "хорошесть" программиста все эти вопросы определить никак не помогут.
Как отсеивать будете тех, у кого это уже дцатое собеседование и все вопросы заучены?
Кстати, а какой правильный ответ на вопрос, поставленный как "Неявное преобразование типов"? Требуется написать реферат или что?
S>>C::C(const B *s)
S>>{
S>> x_.assign(s);
S>>}
S>>
S>>и знал, почему первый вариант предпочтительнее.
FDS>b — это у нас что такое? s что ли? И почему первый вариант предпочтительнее?
В первом варианте не вызывается дефолтный конструктор. Для маленьких классов выигрыш незначительный, для больших может быть существенным. Но в любом случае не следует использовать второй вариант по той причине что вы так привыкли писать в Си, Паскале, Бейсики или ещё где. Для С++ первый вариант — нормальный и читается достаточно легко.
В коде выше — опечатка:b-s.
S>> Чтобы он не думал, что писать, i++ или ++i, а первый вариант выбирал бы только в том случае, если ему в данном куске кода действительно нужно знать, что было в i до инкремента. А не писал по привычке i++. Привычка должна быть другая — писать по умолчанию ++i
FDS>Так, а чем вам i++ не угодило то? Честно скажу, когда я вижу ++i всегда заменяю на i++, потому что ++i раздражает
i — не обязательно встроенный тип, это может быть какой-нибудь навороченный итератор делающий достаточно сложные преобразования.Как правило посфиксный оператор реализуют через префиксный с копированием, отсюда и разница.
Здравствуйте, FDSC, Вы писали:
_>>тут вообще труба FDS>Да, тут труба, ваш код с дефолтным конструктором не компилируется FDS>Error 1 error C2758: 'ScopedLocker::m_synch' : must be initialized in constructor base/member initializer list f:\prg\tmp\070530cpplinks\cpplinks\cpplinks.cpp 29
FDS> Ну как?
Вот он тебе про то и говорит — что дефолтный конструктор опасен, но в случае ссылки даже скомплировать такой код не получится, т.е. компилятор следит за возможностью ошибки. И это очень хорошо. У компилятора голова не болит, она у него железная. В отличие от программиста.
Чем больше проблем отлавлиает компилятор — тем проще программисту.
Возьму риск сделать feedback по наблюдению темы.
(вопрос был немного в другом, но сишники занялись как всегда любимым делом — отслеживанием инициализации ссылок, итд...)
В оригинальном письме содержалось:
не могу найти программиста-профессионала C++: все приходят либо 4.0K+ и ничего делать не хотят ("давайте я будут обсуждать архитектуру, а в свободное от этого время — писать код"), либо 1.5K и в глазах вопрос... а посередине никого не осталось???
Так вот дело в том, все верно, что не можете найти С++.
Ибо C++ программист, это дело такое — он должен быть либо высочайшим профессионалом, либо он не должен быть C++ программистом. Посередине не должно быть. По определению C++ программиста. А вы хотите посредине. Вот отсюда и этот life concept misunderstanding. Или платите деньги и нанимайте профессионалов (найти будет очень сложно, они уже все расхватаны). Или студентов, но миритесь. Везде должен быть компромисс.
Потом второе. Последив за дискуссией, стал понятен ваш метод отсева программистов (я называю их программистами — хотя ваш подход прослеживающийся в дискуссии — это "кодописатель-который-идеально-знает-язык-си-плас-плас"). Некоторые довольно мудрые люди уже заметили, что студент легко справляется с вопросами касаемо синтаксиса языка. А как же быть, если программа не линкуется? Нужно подключить third-party библиотеку? Найти memory leak в этой библиотеке?
Сделайте упор все-таки на практическую сторону. А именно — дайте вначале простейший тест с вопросами (без лимита по времени), затем посадите человека за конкретный инструмент, написать что-то конкретное, по вашей специфике. В некоторых случаях можно получить удивительные результаты. И может случиться так, что они вас удовлетворят.
Вот пример — мне знаком человек, который не ответит на вопросы по ссылкам, виртуальным деструкторам, и уж тем более — темплейтам. То есть он, не "высочайший C++ профессионал". (Соответсвенно, не просит $2-3K, зарплата <1K)
Но зато он очень и очень быстро само-обучаем, способен читать любой ассемблер (и мгновенно разобрать структуру программы) и написать очень функциональный, очень робастный код, снабженный отличными комментариями. Причем, программы/алгоритмы которые он пишет сам, не задавая нигде вопросов, весьма сложны — это, например, эмуляторы микропроцессоров с динамической рекомпиляцией и анализом микропроцессорного кода, и эмуляторы hardware (заметьте, я говорю — сложны программы, а не "C++ текст", как раз C++ текст у него прост). Он понимает общие концепции ООП и использует их с умом. А не лепит везде классы, гуарды, темплейты и ссылки. Ему достаточно указателей. И главное — все работает исключительно хорошо.
Так вот, может быть стоит:
a) Изменить подход к отсеву кандидатов (после ответа на вопрос, кто нужен — "идеальный C++ кодописатель" или "талантливый C++ программист")
б) Выбрать другую платформу? Java? .NET ?
Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, FDSC, Вы писали:
FDS>>Спор начался с того, что ссылка сама — грабли, так как по её использованию не видно, ссылка это или реальный объект CC>IMHO не совсем так: речь шла про то, что ссылка в данном конкретном примере — грабли. CC>А так ссылки есть гут.
Ну, лично я спорил о том, что ссылки вообще грабли, если эти ссылки — члены класса
>микропроцессорного кода, и эмуляторы hardware (заметьте, я говорю — сложны программы, а не "C++ текст", как раз C++ текст у него >прост). Он понимает общие концепции ООП и использует их с умом. А не лепит везде классы, гуарды, темплейты и ссылки. Ему достаточно >указателей. И главное — все работает исключительно хорошо.
отметил ваш пост как полезный!
это к вопросу, нужен ли вам человек чтобы "гнуть пальцы", или выполнять конкретные задачи в заявленный срок.
мне предпочтительнее второе
Здравствуйте, fmiracle, Вы писали:
F>Вот он тебе про то и говорит — что дефолтный конструктор опасен, но в случае ссылки даже скомплировать такой код не получится, т.е. компилятор следит за возможностью ошибки. И это очень хорошо. У компилятора голова не болит, она у него железная. В отличие от программиста. F>Чем больше проблем отлавлиает компилятор — тем проще программисту.
А я что, говорю о чём-то другом? ПОЖАЛУЙСТА, ЧИТАЙТЕ МОИ СООБЩЕНИЯ ПЕРЕД ТЕМ, КАК ОТВЕЧАТЬ НА НИХ!!!
Выше я привёл пример, когда компилятор не даёт скопилировать код не в случае ссылки, а в случае константного указателя. Т.е. я привёл код, где указатель точно так же надо ОБЯЗАТЕЛЬНО инициализировать в конструкторе как и ссылку во избежании ошибки компиляции
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, FDSC, Вы писали:
FDS>>Как раз для этого я и говорю, что указатели лучше. Потому что про ссылку можно забыть, что она ссылка, а указатель — он сразу видно, что указатель LM>А мне крысу достаточно навести, чтобы узнать что это ссылка, а чтобы узнать может ли этот указатель быть нулевым придется по коду полазить
Если вы не понимаете код, то самое время по нему полазить. Указатель вовремя укажет на это, а со ссылкой вы будете радостно думать, что всё хорошо
К тому же крыса сообщит вам, что указатель константен, так что лазить особо и не придётся
Здравствуйте, alzt, Вы писали:
A>i — не обязательно встроенный тип, это может быть какой-нибудь навороченный итератор делающий достаточно сложные преобразования.Как правило посфиксный оператор реализуют через префиксный с копированием, отсюда и разница.
Если это будет итератор — я учту. Только скорее я буду там использовать ".Next" а не "++", а если я пишу for (int i = 0; i < L; i++), то какого чёрта мне писать ++i, это просто некрасиво
Здравствуйте, 0x8000FFFF, Вы писали:
FFF>>>Я уверен в этом, потому что всё между собой тесно связанно и одно из другого вытекает... если заниматься делом не абы как, а с фундаментальным подходом — то все можно познать.
FDS>>Ну, я вот сейчас сопроматом занимаюсь. Стандартный курс сопромата сдал на 5. Вы думаете, что я понимал то, за что получил 5? Да не фига! Мне потребовалось 1,5 года занятий по нелинейной теории чтобы наконец-то понять, что же там было.
FFF>Ну вот видите — как все между собой связано — в программирование все тоже самое...
Ну и? Но как мне это помогло выучить теор. мех напирмер? Да никак
Связано то связано, только всё равно, тонкости языка можно почувствовать, только когда реально много на нём программируешь и взаимодействуешь с другими программистами
Как только ушёл от этого языка — сразу забывать начинаешь. Я после .NET частенько даже забываю о том, что память нужно очищать, а уж чем protected в Delphi отличается от protected в C#, наверняка, правильно не скажу. Мне это просто не нужно, а если бы было нужно — сказал бы слёту
Человек имеет свойство забывать то, с чем давно не имел дела. Хотя забывается всё по разному, но забывается, а для того, чтобы сначала что-то изучить нужно потратить много времени (чтобы потом забыть)
Мне безразлично на каком языке я программирую, но это не значит, что я знаю все тонкости и даже просто все основные концепции программирования на C++, хотя писал на нём нормально работающие программы. Для того, что бы знать C++ мне нужно программировать на нём нечто относительно сложное и в коллективе, что бы шёл обмен опытом. Грубо говоря, как сейчас, когда мне объясняют, что ссылки вполне можно использовать и в этом нет ничего страшного (что для меня новость), а сами не могут понять, что указатели тоже можно использовать, аналогично ссылкам, с обязательной инициализацией
Вопрос можно ставить более широко. Работодатели всегда требуют, чтоб кандидат знал, то, что они считают нужным, умел делать то, что им нужно и делал это именно так, как они считают правильным. При этом работодатели либо не хотят, либо не могут выяснить, может ли кандидат обучиться тому, что им нужно, готов ли он следовать их стандартам программирования и т.д. И порой складывается парадоксальная ситуация, фирма не может найти себе специалиста, а толпа специалистов даже не знает, какие требования предъявляются в этой фирме и не может привести себя в соответствие с этими требованиями.
Здравствуйте, flashinc, Вы писали:
F>Сделайте упор все-таки на практическую сторону. А именно — дайте вначале простейший тест с вопросами (без лимита по времени), затем посадите человека за конкретный инструмент, написать что-то конкретное, по вашей специфике. В некоторых случаях можно получить удивительные результаты. И может случиться так, что они вас удовлетворят.
Именно. Надо смотреть как человек справляется с данными ему заданиями. Хорошо еще давать код и просить найти баги, проблемы, неудачные решения. Обсудить возможности расширения, параллелизации и т.п.
Здравствуйте, FDSC, Вы писали:
FDS>А я что, говорю о чём-то другом?
Да, там было четко написано "Ваш код не скопилируется", ни слова "мой тоже не скомпилируется".
FDS>ПОЖАЛУЙСТА, ЧИТАЙТЕ МОИ СООБЩЕНИЯ ПЕРЕД ТЕМ, КАК ОТВЕЧАТЬ НА НИХ!!!
не горячись, выпей валокордину что ли.
И пойми — даже если ты знаешь Дао и можешь написать такой хитрый выкрутас, который позволит использовать указатели вместо ссылок — то обычные смертные программисты такого не знают все равно и не уверены, что твое заклинание все еще в силе. Потому не смогут в других методах класса предполагать по умолчанию, что твой указатель ведет себя как ссылка и обязательно требует инициализации. Ну просто не могут, если у них есть какой-то практический опыт рабоыт в нашем переменчивом мире.
Потому что можно, конечно, использовать в театре, настоящие боевые полностью исправные автоматы, написав в инструкции, что патронов в них нет, и никогда не будет. Но здавомыслящий человек все же будет проверять наличие патронов прежде чем снимать его с предохранителя.
Ибо преценденты "неожиданного" появления боевых патронов в ранее незаряженном оружии в человеческой истории были.
Ну а неожиданное изменение поведения инциализации членов класса это вообще обычное дело.
Предположение что "данный указатель в данной программе всегда будет инициализирован, потому что так сказал Я" оно гораздо слабее, чем "данная ссылка всегда будет инициализирована, потому что неинициализированной ссылка быть просто не может".
Здравствуйте, FDSC, Вы писали:
A>>i — не обязательно встроенный тип, это может быть какой-нибудь навороченный итератор делающий достаточно сложные преобразования.Как правило посфиксный оператор реализуют через префиксный с копированием, отсюда и разница.
FDS>Если это будет итератор — я учту. Только скорее я буду там использовать ".Next" а не "++", а если я пишу for (int i = 0; i < L; i++), то какого чёрта мне писать ++i, это просто некрасиво
Мне почему-то тоже привычнее писать i++, хотя рационально объяснить я это не могу.
Здравствуйте, fmiracle, Вы писали:
F>И пойми — даже если ты знаешь Дао и можешь написать такой хитрый выкрутас, который позволит использовать указатели вместо ссылок — то обычные смертные программисты такого не знают все равно и не уверены, что твое заклинание все еще в силе. Потому не смогут в других методах класса предполагать по умолчанию, что твой указатель ведет себя как ссылка и обязательно требует инициализации. Ну просто не могут, если у них есть какой-то практический опыт рабоыт в нашем переменчивом мире.
Это никакие не заклинания. Я привёл вполне реальную вещь, которая абсолютно так же, как и ссылка, блокирует изменение значения указателя простым объявлением константности. Инициализации они требует, потому что указатель объявлен как константа, абсолютно аналогично ссылке. Единственное, при инициализации нужно проверить, что указатель инициализируется не нулём или инициализировать его с помощью переданной в конструктор ссылки (как я и продемонстрировал). Т.е. проверить указатель нужно лишь один раз: при инициализации в конструкторах или вообще не проверять, если используется ссылка
В чём тут колдовство я не понимаю. А вот у вас колдовство потом получится может, программист будет думать, что он изменяет приватный объект, например, а на самом деле будет изменять ссылку....
F>Потому что можно, конечно, использовать в театре, настоящие боевые полностью исправные автоматы, написав в инструкции, что патронов в них нет, и никогда не будет. Но здавомыслящий человек все же будет проверять наличие патронов прежде чем снимать его с предохранителя.
В данном случае, указатель далеко не полностью боевой. Ещё раз прошу вас прочитать сообщение, на которое вы ответили, перед тем, как продолжать со мной спор
F>Ибо преценденты "неожиданного" появления боевых патронов в ранее незаряженном оружии в человеческой истории были.
Да, зато ни разу не было, что бы автомат со спиленным бойком стрелял
F>Ну а неожиданное изменение поведения инциализации членов класса это вообще обычное дело.
Это да. Хотя если программист не совсем дурак, передавать NULL в конструктор он всё равно не будет, но даже если передаст, вы это сразу заметите, а вот где изменяется ваш любимый и лелеемый объект вы не заметите, если он будет изменяться по ссылке. Вы будете читать код и видеть, что изменяется какой-то другой объект, а вовсе не ссылка на ваш.
F>Предположение что "данный указатель в данной программе всегда будет инициализирован, потому что так сказал Я" оно гораздо слабее, чем "данная ссылка всегда будет инициализирована, потому что неинициализированной ссылка быть просто не может".
Константный указатель тоже не может быть неинициализирован — это ошибка компиляции. Третий раз прошу прочитать мой пост, перед тем, как продолжать спор
Здравствуйте, DKM_MSFT, Вы писали:
DKM>За три недели человек проделал объем работы, который удивил всю команду. Вчера я делал code-review его кода. Код идеально соответсвует духу соответсвующих приложений, я нашел 6 стилистических проблем в коде, который занимал несколько десятков экранов.
Здравствуйте, FDSC, Вы писали:
FDS>Если это будет итератор — я учту. Только скорее я буду там использовать ".Next" а не "++", а если я пишу for (int i = 0; i < L; i++), то какого чёрта мне писать ++i, это просто некрасиво
Думай на тему STL и общего дизайна кода по всему проекту:
for (int i = 0; i < L; i++)
for (iterator i = start; i != end; ++i)
суть циклов совершенно одинакова. Почему надо в одном случае пиасать ++i а в другом i++???
Почему не писать более "общий" ++i?
Какая тут вообще принципиальная разница с этетической точки зрения где плюсики? Надо просто взять какой-то вариант в привычку да и использовать. Привычным может быть как тот так и другой. Зачем так упираться в свою привычку-то?
Я раньше тоже всегда писал i++, казалось красивее. Почитав про копирование перешел на ++i без каких-то проблем — теперь так же кажется красивее это. Или у тебя есть строгое доказательство большей красивости постфикса над префиксом?
Использовать .Next это круто конечно же. Особенно если создаешь итератор для работы с stl например, который предполагает наличие ++ но не .Next().
Я уж не говорю про случай, когда ты пользуешься чужим итератором, где нет твоего метода .Next. Ну можно обматерить автора, правда.
Здравствуйте, fmiracle, Вы писали:
F>Думай на тему STL и общего дизайна кода по всему проекту:
F>for (int i = 0; i < L; i++) F>for (iterator i = start; i != end; ++i)
А я такие циклы через while делаю
F>Какая тут вообще принципиальная разница с этетической точки зрения где плюсики? Надо просто взять какой-то вариант в привычку да и использовать. Привычным может быть как тот так и другой. Зачем так упираться в свою привычку-то?
У меня высокохудожественный вкус: центр масс выражения "i++)" по середине, а "++i)" смещён вправо. К тому же, скобка рядом с переменной немного затрудняет чтение кода, а когда она отделена ++ это улучшает визуальную читабельность
F>Я раньше тоже всегда писал i++, казалось красивее. Почитав про копирование перешел на ++i без каких-то проблем — теперь так же кажется красивее это. Или у тебя есть строгое доказательство большей красивости постфикса над префиксом?
F>Использовать .Next это круто конечно же. Особенно если создаешь итератор для работы с stl например, который предполагает наличие ++ но не .Next(). F>Я уж не говорю про случай, когда ты пользуешься чужим итератором, где нет твоего метода .Next. Ну можно обматерить автора, правда.
Ну, что поделаешь...
iterator i = start;
while( i != end)
{
// ....
++i;
}
На такое согласен, хотя всё равно, как-будто i с каким-то цепом в руках куда-то идёт
Я стремлюсь, что бы код выглядел визуально красиво. В частности, никогда не понимал Макконнелла, когда он говорил, что
знаки равно в коде
int i = 0;
int kjfdsl = 0;
не нужно выравниваить и никто не будет заниматься их поддержкой
Здравствуйте, FDSC, Вы писали:
FDS>У меня высокохудожественный вкус: центр масс выражения "i++)" по середине, а "++i)" смещён вправо. К тому же, скобка рядом с переменной немного затрудняет чтение кода, а когда она отделена ++ это улучшает визуальную читабельность
С отделением скобки для улчшения читабельности согласен, то лично я просто предпочитаю всегда отделять скобки и операторы пробелами:
....; ++i );
а так же:
if( a )
while( !b )
Foo.Bar( c + 1 );
Здравствуйте, Ulter, Вы писали:
U>то это то-же самое, что abbyy и bitsoft U>Делайте выводы...
А какие выводы надо сделать?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, sc, Вы писали:
sc>В данном случае, если ссылку заменить на указатель, вред точно такой же sc>Почему же указатели хуже? Потому что Гугл на запрос "pointers are evil" выдает 554 ссылки а на "references are evil" всего 10
Да просто ссылки ЗЛО малоизвестное
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, NikeByNike, Вы писали:
NBN>Здравствуйте, FDSC, Вы писали:
FDS>>И тут она будет поймана компилятором. Вставьте ВЕСЬ мой код в компилятор и попробуйте скомпилировать
NBN> virtual ~C2() NBN> { NBN> delete c1; NBN> c1 = NULL; <- лишнее действие NBN> }
На сколько я помню, оператор delete не обнуляет операнд-указатель. А у меня есть привычка некоторые поля классов обнулять при уничтожении, что бы если на них был указатель, он не указывал на когда-то бывшие валидные данные
Здравствуйте, sc, Вы писали:
sc>ну вот, начали уже не помню с чего, продолжили ссылками и указателями, теперь спор идет о количестве пробелов. причем совсем не конструктивный
FDS>>Если это будет итератор — я учту. Только скорее я буду там использовать ".Next" а не "++", а если я пишу for (int i = 0; i < L; i++), то какого чёрта мне писать ++i, это просто некрасиво F>Думай на тему STL и общего дизайна кода по всему проекту: F>for (int i = 0; i < L; i++) F>for (iterator i = start; i != end; ++i) F>суть циклов совершенно одинакова. Почему надо в одном случае пиасать ++i а в другом i++??? F>Почему не писать более "общий" ++i? F>Какая тут вообще принципиальная разница с этетической точки зрения где плюсики? Надо просто взять какой-то вариант в привычку да и использовать. Привычным может быть как тот так и другой. Зачем так упираться в свою привычку-то? F>Я раньше тоже всегда писал i++, казалось красивее. Почитав про копирование перешел на ++i без каких-то проблем — теперь так же кажется красивее это. Или у тебя есть строгое доказательство большей красивости постфикса над префиксом? :)
Это всего лишь "мода" Мейерса или Саттера. Кроме того что прочитать и следовать "новой моде" полезно знать, какой код будет в реальности. А в реальности в 99.9% temporary не создастся, только если специально не стараться. Если иметь по всему проекту привычку писать ++i, легко "намозолить глаза", и рано или поздно, влететь в ситуацию когда напишешь ++ptr = ... вместо ptr++ Представим, что мы пишем некий аддон для браузера, где этот указатель передается в функцию и по нему что-то записывается или читается.
Далее может быть такой сценарий: memory access, на x86 как известно, чекается по страницам 4kb. Пока количество объектов в списке (массиве) будет определенным, Access Violation происходить не будет. Но в один прекрасный день, допустим, html-документ вытянутый с сервера будет иметь размер как раз такой, что выполнив ++ptr указатель при доступе по нему будет заходить в область другой 4kb memory page. Всё. Access Violation. До свидания. Браузер упал, URL в кэш не записался.
А все почему? Да потому что следовали моде, повышали эффективность оператора i++. В реальности нужно не следовать моде,
а здравому смыслу и все перепроверять на деле. Кстати, это касается и языковых изысков самого Страуструпа...
p.s.
в дискуссии выше, про сылки, еще не промелькнуло использование везде где только можно вместо ссылок или указателей
auto_ptr или shared_ptr. В том числе, и в качестве полей класса. Есть и такие "модники"....
Здравствуйте, flashinc, Вы писали:
F>p.s. F> в дискуссии выше, про сылки, еще не промелькнуло использование везде где только можно вместо ссылок или указателей F>auto_ptr или shared_ptr. В том числе, и в качестве полей класса.
Естественно! В качестве полей класса надо использовать в зависимости от ситуации boost::shared_ptr или boost::scoped_ptr. Сразу видно какая политика владения и в большинстве случаев можно обойтись без написания деструктора.
Не хватает только стандартного copy_ptr, который бы при копировании клонировал объект на который указывает.
F>Есть и такие "модники"....
Здравствуйте, flashinc, Вы писали:
F>Это всего лишь "мода" Мейерса или Саттера. Кроме того что прочитать и следовать "новой моде" полезно знать, какой код будет в реальности. А в реальности в 99.9% temporary не создастся, только если специально не стараться.
Совершенно не обязательно, что не создасться. Все равно лучше писать чтобы выполнялись только необходимые действия.
F>Если иметь по всему проекту привычку писать ++i, легко "намозолить глаза", и рано или поздно, влететь в ситуацию когда напишешь ++ptr = ... вместо ptr++
Здравствуйте, FDSC, Вы писали:
LM>>А мне крысу достаточно навести, чтобы узнать что это ссылка, а чтобы узнать может ли этот указатель быть нулевым придется по коду полазить FDS>Если вы не понимаете код, то самое время по нему полазить. Указатель вовремя укажет на это, а со ссылкой вы будете радостно думать, что всё хорошо FDS>К тому же крыса сообщит вам, что указатель константен, так что лазить особо и не придётся
У класса может быть более одного конструктора
Здравствуйте, FDSC, Вы писали:
LM>>А мне крысу достаточно навести, чтобы узнать что это ссылка, а чтобы узнать может ли этот указатель быть нулевым придется по коду полазить FDS>Если вы не понимаете код, то самое время по нему полазить. Указатель вовремя укажет на это, а со ссылкой вы будете радостно думать, что всё хорошо FDS>К тому же крыса сообщит вам, что указатель константен, так что лазить особо и не придётся
+
то что указатель константен не говорит о том, что он не может быть не равен NULL
Здравствуйте, maximm__, Вы писали:
__>не могу найти программиста-профессионала C++: все приходят либо 4.0K+ и ничего делать не хотят ("давайте я будут обсуждать архитектуру, а в свободное от этого время — писать код"), либо 1.5K и в глазах вопрос — "а он про шаблоны спросит или нет?"
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, FDSC, Вы писали:
LM>>>А мне крысу достаточно навести, чтобы узнать что это ссылка, а чтобы узнать может ли этот указатель быть нулевым придется по коду полазить FDS>>Если вы не понимаете код, то самое время по нему полазить. Указатель вовремя укажет на это, а со ссылкой вы будете радостно думать, что всё хорошо FDS>>К тому же крыса сообщит вам, что указатель константен, так что лазить особо и не придётся LM>У класса может быть более одного конструктора
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, FDSC, Вы писали:
LM>>>А мне крысу достаточно навести, чтобы узнать что это ссылка, а чтобы узнать может ли этот указатель быть нулевым придется по коду полазить FDS>>Если вы не понимаете код, то самое время по нему полазить. Указатель вовремя укажет на это, а со ссылкой вы будете радостно думать, что всё хорошо FDS>>К тому же крыса сообщит вам, что указатель константен, так что лазить особо и не придётся LM>+ LM>то что указатель константен не говорит о том, что он не может быть не равен NULL
Да, поэтому вам и придётся полазить в конструкторе
Здравствуйте, Андрей Хропов, Вы писали:
АХ>Здравствуйте, flashinc, Вы писали:
F>>Это всего лишь "мода" Мейерса или Саттера. Кроме того что прочитать и следовать "новой моде" полезно знать, какой код будет в реальности. А в реальности в 99.9% temporary не создастся, только если специально не стараться.
АХ>Совершенно не обязательно, что не создастся. Все равно лучше писать чтобы выполнялись только необходимые действия.
Я, например, считаю, что программист вообще не должен думать о том, создастся или нет, если только он не занят оптимизацией. Благо, компилятор, вообще говоря, без труда может определить, используется ли где-нибудь значение i из i++ или нет.
А постоянно думать над тем, что эффективно, а что нет — это так можно просто загнуться и ничего не написать. Сколько уже раз говорили, оптимизируйте только то, что реально медленно работает, а таки проколы в оптимизациях компилятора (которые даже оптимизациями-то назвать нельзя) — это не забота программиста, если работает приемлемо быстро
Думать нужно о том, что пишешь, а уже потом о его скорости (или наоборот, сначала, если выбираешь алгоритм или архитектуру), но никак не во время кодирования. Давайте тогда вообще выбросим .NET, потому что сборка мусора менее эффективна, чем ручное распределение памяти
Здравствуйте, FDSC, Вы писали:
FDS>>>К тому же крыса сообщит вам, что указатель константен, так что лазить особо и не придётся LM>>У класса может быть более одного конструктора FDS>Ну и не сотня
Но мне нужно лезть куда-то, чтобы понять, что эта фигня не может быть НУЛЛ
Здравствуйте, FDSC, Вы писали:
FDS>>>К тому же крыса сообщит вам, что указатель константен, так что лазить особо и не придётся LM>>+ LM>>то что указатель константен не говорит о том, что он не может быть не равен NULL FDS>Да, поэтому вам и придётся полазить в конструкторе
А зачем мне лазить?!
Здравствуйте, FDSC, Вы писали:
FDS>А постоянно думать над тем, что эффективно, а что нет — это так можно просто загнуться и ничего не написать. Сколько уже раз говорили, оптимизируйте только то, что реально медленно работает, а таки проколы в оптимизациях компилятора (которые даже оптимизациями-то назвать нельзя) — это не забота программиста, если работает приемлемо быстро
FDS>Думать нужно о том, что пишешь, а уже потом о его скорости (или наоборот, сначала, если выбираешь алгоритм или архитектуру), но никак не во время кодирования. Давайте тогда вообще выбросим .NET, потому что сборка мусора менее эффективна, чем ручное распределение памяти
Знаешь в чем фишка ? Думать приходится первые несколько раз. Потом все ясно автоматически без раздумий, и никаких потерь времени от микрооптимизации одинаковых кусков кода одинаковыми способами нет. Это как кодинг стайл — над ним не задумываешься когда рука уже набита.
Здравствуйте, FDSC, Вы писали:
<skipped> F>>>Это всего лишь "мода" Мейерса или Саттера. <skipped>
У Саттера/Александреску понравилась шутка в их 101 правиле (шутка не их). Правило 28.
An ancient joke about C++ was that the language is called C++ and not ++C because the language is improved (incremented), but many people still use it as C (the previous value). Fortunately, the joke is now obsolete, but it's a helpful illustration for understanding the difference between the two operator forms.
Правда они наивно полагают, что шутка устарела. Но нет, она еще все очень актуальна
<skipped> FDS>А постоянно думать над тем, что эффективно, а что нет — это так можно просто загнуться и ничего не написать. Сколько уже раз говорили, оптимизируйте только то, что реально медленно работает, а таки проколы в оптимизациях компилятора (которые даже оптимизациями-то назвать нельзя) — это не забота программиста, если работает приемлемо быстро
<skipped>
По поводу оптимизации они там же продолжают:
This is not premature optimization; it is avoiding premature pessimization.
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, FDSC, Вы писали:
FDS>>>>К тому же крыса сообщит вам, что указатель константен, так что лазить особо и не придётся LM>>>У класса может быть более одного конструктора FDS>>Ну и не сотня LM>Но мне нужно лезть куда-то, чтобы понять, что эта фигня не может быть НУЛЛ
Да, зато если ты будешь читать код, никогда не перепутаешь ссылку с объектом — а такую путаницу уже просто так не обнаружишь.
Я уже говорил, что если не понимаешь, как работает программа, лучше слазить посмотреть и указатель тебе подскажет, что ты не понимаешь. А если ссылка будет, то ты так и не заметишь, что что-то не то
Здравствуйте, kittown, Вы писали:
K>Знаешь в чем фишка ? Думать приходится первые несколько раз. Потом все ясно автоматически без раздумий, и никаких потерь времени от микрооптимизации одинаковых кусков кода одинаковыми способами нет. Это как кодинг стайл — над ним не задумываешься когда рука уже набита.
Зато некрасиво. С какой стати я буду делать то, что мне не нравится просто так, чтобы это в привычку вошло? Если где-то создание лишнего объекта (а это — вообще говоря — баг компилятора) мне будет тормозить выполнение программы (ох как я в этом сомневаюсь), то я найду это место и поставлю там ++i, но иначе я буду писать так, как мне это приятно
АХ>Совершенно не обязательно, что не создасться. Все равно лучше писать чтобы выполнялись только необходимые действия.
Если продолжать обсуждать теоретического сферического коня в ваккууме,
чем, собственно, и занимаются авторы книг по С++ — то да, некоторая опасность существует. (То есть, находится на одном уровне абстракции — называемом языком C++ и не иметь желания спуститься вниз и принять во внимание РЕАЛЬНОСТЬ).
А вот если изучить основные компиляторы которыми приходится пользоваться, и выполнить инспекцию объектов подлежащих пост-инкременту и получаемого x86 кода — то страдать этой фигней не придется.
Я за практический здравый подход. А то извините, если транслировать на реальность подобные "опасения", то ни с одной девушкой спать без презерватива нельзя, ни-ни. Даже с собственной женой. Потому чт вероятность того что она заразит тебя спидом остается. Она хоть и исчезающе мала, тысячные доли процента — но все-таки существует. Так что? — надевать презерватив еще в детстве и не снимать его вовсе?..... :-)
Надеюсь аналогия понятна :-)))
> и т.д. И порой складывается парадоксальная ситуация, фирма не может найти себе специалиста, а толпа специалистов даже >не знает, какие требования предъявляются в этой фирме и не может привести себя в соответствие с этими требованиями.
не поэтому ли "хорошие" вакансии порой лежат на джоб.ру открытыми месяцами.
A>не поэтому ли "хорошие" вакансии порой лежат на джоб.ру открытыми месяцами.
Некоторые вакансии к тому же составляются молоденькими девочками, даже без консультаций с уже работающими и знающими специфику специалистами. Знаю не по наслышке, у нас одна такая работала некоторое время... Страшно смотреть было на приходящих кандидатов.
Здравствуйте, IWantToAsk, Вы писали:
A>>не поэтому ли "хорошие" вакансии порой лежат на джоб.ру открытыми месяцами.
IWT>Некоторые вакансии к тому же составляются молоденькими девочками, даже без консультаций с уже работающими и знающими специфику специалистами. Знаю не по наслышке, у нас одна такая работала некоторое время... Страшно смотреть было на приходящих кандидатов.
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, FDSC, Вы писали:
FDS>>>>К тому же крыса сообщит вам, что указатель константен, так что лазить особо и не придётся LM>>>+ LM>>>то что указатель константен не говорит о том, что он не может быть не равен NULL FDS>>Да, поэтому вам и придётся полазить в конструкторе LM>А зачем мне лазить?!
Короче говоря, тут ничья: мы можете сказать, что нужно контролировать, что бы инициализация указателя была правильно, я могу сказать, что при этом дальше при использовании ссылки синтаксис не напоминает о том, что используется именно ссылка.
Недостаток указателей в этом случае более часто встречающийся, но влечёт за собой гораздо меньшие последствия, даже если его вдруг проинициализируют нулём
Недостаток ссылок более редкий, но зато если уж встретится, с ним придётся помучится: ошибка не будет бросаться в глаза из самого кода
Здравствуйте, Kubyshev Andrey, Вы писали:
KA>Читаю эту ветку находясь в отпуске на море... И знаете, такое чуство возникает, что возня какая то у вас там в Москве нездоровая
Ты бросил пчел и огород без присмотра?!
KA>Не то что бы я там че то, просто я к тому что оторвите взгляд от компа, типа повертите в разные стороны и все такое... KA>А вы опять за свои копи-конструкторы, констатные методы и прочее ...
Так в деревне тоже не все ладно. На море сидеть в инете....
Здравствуйте, DKM_MSFT, Вы писали:
DKM>Здравствуйте, Sergey, Вы писали:
S>>Зато незнание языка много что значит У меня на собеседовании треть кандитатов уходила после того, как не могли ответить на один из первых вопросов — как проинициализировать ссылку-член класса.
DKM>Это означает лишь то, что благодаря вашим усилиям, компания, вполне вероятно, лишилась многих хороших программистов.
к сожалению те кто говорят о ссылка или указателях элементарно не могут сделать вывод на печать или организовать работу с БД. Я б на месте хозяев более критично к таким личностям относился. А то и сами ничего не могут кроме как про виртуальные деструкторы трындеть так ещё и другим не дают.
Здравствуйте, sss1024, Вы писали:
S>к сожалению те кто говорят о ссылка или указателях элементарно не могут сделать вывод на печать или организовать работу с БД. Я б на месте хозяев более критично к таким личностям относился. А то и сами ничего не могут кроме как про виртуальные деструкторы трындеть так ещё и другим не дают.
Ты не находишь, что это элементарно совершенно разные задачи? Даже наверно разные профессии?
Я раньше миддлеваре разрабатывал, вот там было очень много трындежа о хорошем стиле С++. Весь код писался по всем правилам от гуру и ещё более придирчиво. Это было правильно, потому что этим кодом пользуется уйма народу, в том числе в других странах.
Сейчас пишу софт с большим количеством гуйни. Тут думать о вылизанности кода уже не приходится. Разрабатывают прогу 2-3 человека, нет необходимости в чрезмерной чистоте кода, всегда можно узнать, что имелось в виду.
IWT>>Некоторые вакансии к тому же составляются молоденькими девочками, даже без консультаций с уже работающими и знающими специфику специалистами. Знаю не по наслышке, у нас одна такая работала некоторое время... Страшно смотреть было на приходящих кандидатов.
FDS>Что, некрасивые девушки приходили? FDS>
Здравствуйте, FDSC, Вы писали:
FDS>На сколько я помню, оператор delete не обнуляет операнд-указатель. А у меня есть привычка некоторые поля классов обнулять при уничтожении, что бы если на них был указатель, он не указывал на когда-то бывшие валидные данные
Гм. Но ведь весь объект разрушается. И если кто-то будет ссылаться на поле разрушенного объекта то не всели равно что там? Всеравно будет большой бум ибо там может оказатся что угодно после того как память отдадут другому объекту..
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, FDSC, Вы писали:
FDS>Вообще-то компилятор должен, вроде, сам сгенерировать дефолтный конструктор ABC(int &)
Чего простите?
Кому это он должен?
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
NBN>Я раньше миддлеваре разрабатывал, вот там было очень много трындежа о хорошем стиле С++. Весь код писался по всем правилам от гуру и ещё более придирчиво. Это было правильно, потому что этим кодом пользуется уйма народу, в том числе в других странах.
а оно хоть работало, мидлеваре-то это? Или как обычно, все i++ поменяли на ++i а сообщения между слоями паковали в XML и распаковывали с помощью DOM-парсера? Если ты понимаешь о чём я
> S>к сожалению те кто говорят о ссылка или указателях элементарно не могут сделать вывод на печать или организовать работу с БД. Я б на месте хозяев более критично к таким личностям относился. А то и сами ничего не могут кроме как про виртуальные деструкторы трындеть так ещё и другим не дают. > > Ты не находишь, что это элементарно совершенно разные задачи? Даже наверно разные профессии? > > Я раньше миддлеваре разрабатывал, вот там было очень много трындежа о хорошем стиле С++. Весь код писался по всем правилам от гуру и ещё более придирчиво. Это было правильно, потому что этим кодом пользуется уйма народу, в том числе в других странах. > Сейчас пишу софт с большим количеством гуйни. Тут думать о вылизанности кода уже не приходится. Разрабатывают прогу 2-3 человека, нет необходимости в чрезмерной чистоте кода, всегда можно узнать, что имелось в виду.
Основная веселуха начинается, когда объем кода превышает возможности головного мозга написавших его авторов. Тут и про хороший стиль вспомнают, и про правила от гуру — однако поздно может оказаться и приходится все с нуля переписывать. И разумеется, основную роль в написании сложного и запутанного кода играют обычно молодые дарования, не знающие даже зачем нужны виртуальные деструкторы И нет никакой разницы, гуй это был или миддлеваре — гуй тоже грамотно писать надо.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Awaken, Вы писали:
A>не поэтому ли "хорошие" вакансии порой лежат на джоб.ру открытыми месяцами.
Да, и бизнес этих компаний не расширяется. Но это не может продолжаться вечно. В условиях дефицита кадров компании, следующие принципу "лучше не нанять десять подходящих чем нанять одного неподходящего" вымрут, как динозавры. А выживут те, кто вместо "возможно, этот не подходит" научатся определять уровень кандидатов с учётом их возможностей к обучению.
NBN>>Я раньше миддлеваре разрабатывал, вот там было очень много трындежа о хорошем стиле С++. Весь код писался по всем правилам от гуру и ещё более придирчиво. Это было правильно, потому что этим кодом пользуется уйма народу, в том числе в других странах.
S>а оно хоть работало, мидлеваре-то это? Или как обычно, все i++ поменяли на ++i а сообщения между слоями паковали в XML и распаковывали с помощью DOM-парсера? Если ты понимаешь о чём я
Работает, уже несколько лет. С алгоритмической точки зрения оно вылизано до предела, как ракета Есть куча вспомогательных, тяжелых вещей, которые отваливаются в релизе.
NBN>Работает, уже несколько лет. С алгоритмической точки зрения оно вылизано до предела, как ракета Есть куча вспомогательных, тяжелых вещей, которые отваливаются в релизе.
релиз это и есть конечная цель разработки. Если вы не в состоянии сделать работающую систему (а не ту в которой что-то отваливается) то грош цена любым алгоритмам.
Здравствуйте, sss1024, Вы писали:
NBN>>Работает, уже несколько лет. С алгоритмической точки зрения оно вылизано до предела, как ракета Есть куча вспомогательных, тяжелых вещей, которые отваливаются в релизе.
S>релиз это и есть конечная цель разработки. Если вы не в состоянии сделать работающую систему (а не ту в которой что-то отваливается) то грош цена любым алгоритмам.
Ты чего то не понимаешь. Система хорошая. То что отваливается — запрограммировано на отваливание, чтобы в релизе небыло ничего лишнего. Т.е. к примеру, данные на этапе разработки хранятся в хмл, а в релизе — в бинарном файле, оптимизированном для данной конкретной платформы. Соответственно ХМЛ парсер и вся связанная с ним система сериализации в релизе не компилируется.
Здравствуйте, sss1024, Вы писали:
S>релиз это и есть конечная цель разработки. Если вы не в состоянии сделать работающую систему (а не ту в которой что-то отваливается) то грош цена любым алгоритмам.
Многие вещи полезны при отладке. В релизе они на хрен не нужны. Вот их и надо отваливать.
Здравствуйте, 0x8000FFFF, Вы писали:
FFF>Это да, если используешь действительно стандартные или сторонние контролы, но задачи часто на этом не ограничиваются. Очень часто приходится делать свои контролы. Покажите мне бесплатный контрол, который позволял бы расставлять и редактировать сплайны на картинке или для 3D модели. Может и есть платный — тут вот и думай — самому реализовывать или покупать — что дешевле.
Дешево и сердито- купить готовый и бороться с багами. Дорого и качественно (расширяемость, конкурентное преимущество, быстрое устранение багов) — написать свой.
IWT>>Некоторые вакансии к тому же составляются молоденькими >девочками, даже без консультаций с уже работающими и знающими A>если это твое дело за которое ты отвечаешь — составляй сам. я описания сам придумывал и уже потом отдавал девочкам.
Эээ! Я, как программист, отвечаю только за свой код. А за подбор кадров отвечают кадровики.
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, FDSC, Вы писали:
FDS>>На сколько я помню, оператор delete не обнуляет операнд-указатель. А у меня есть привычка некоторые поля классов обнулять при уничтожении, что бы если на них был указатель, он не указывал на когда-то бывшие валидные данные WH>Гм. Но ведь весь объект разрушается. И если кто-то будет ссылаться на поле разрушенного объекта то не всели равно что там? Всеравно будет большой бум ибо там может оказатся что угодно после того как память отдадут другому объекту..
У меня лично в моей практике программирования были случаи, когда обращение по этим областям не вызывало ни Access Violation, ни большого бума. На это место, например, мог быть случайно записан объект того же класса ну и дальше сами понимаете... да и даже если ничего не записано, если в адресном пространстве процесса в выделенных страницах, то, вроде, AV не должно возникать, а значения там могут остаться просто прежними
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, FDSC, Вы писали:
FDS>>Вообще-то компилятор должен, вроде, сам сгенерировать дефолтный конструктор ABC(int &) WH>Чего простите? WH>Кому это он должен?
Хм, программисту он должен. Я вот сейчас даже проверил — в VS 2005 генерирует
Здравствуйте, Панда, Вы писали:
П>Ни разу в жизни не использовал ++i. Всегда i++. Жизнь кончена! Пойду в грузчики
Извини, но это не смешно. Это значит, что ни до Мейерса, ни до Саттера руки не дошли
Здравствуйте, FDSC, Вы писали:
FDS>Так, а чем вам i++ не угодило то? Честно скажу, когда я вижу ++i всегда заменяю на i++, потому что ++i раздражает
А системник выбираете по цвету корпуса. Розовый — это так гламурно...
Здравствуйте, FDSC, Вы писали:
FDS>Я, например, считаю, что программист вообще не должен думать о том, создастся или нет, если только он не занят оптимизацией. Благо, компилятор, вообще говоря, без труда может определить, используется ли где-нибудь значение i из i++ или нет.
А если i имеет тип отличный от инта?
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, WolfHound, Вы писали:
WH>>Здравствуйте, FDSC, Вы писали:
FDS>>>На сколько я помню, оператор delete не обнуляет операнд-указатель. А у меня есть привычка некоторые поля классов обнулять при уничтожении, что бы если на них был указатель, он не указывал на когда-то бывшие валидные данные WH>>Гм. Но ведь весь объект разрушается. И если кто-то будет ссылаться на поле разрушенного объекта то не всели равно что там? Всеравно будет большой бум ибо там может оказатся что угодно после того как память отдадут другому объекту..
FDS>У меня лично в моей практике программирования были случаи, когда обращение по этим областям не вызывало ни Access Violation, ни большого бума. На это место, например, мог быть случайно записан объект того же класса ну и дальше сами понимаете... да и даже если ничего не записано, если в адресном пространстве процесса в выделенных страницах, то, вроде, AV не должно возникать, а значения там могут остаться просто прежними
Ага, давай закладывайся на это. Потом, после релиза, будешь долго объяснять, что у тебя в дебаге всё работало...
Здравствуйте, deniok, Вы писали:
D>Ага, давай закладывайся на это. Потом, после релиза, будешь долго объяснять, что у тебя в дебаге всё работало...
Не понял о чём речь. Эти случаи были в Delphi, которая не делит как VisualStudio версии на релизные и отладочные. Когда я программирую на C++ ПРАКТИЧЕСКИ НИКОГДА не использую отладочный режим: он усложняет отладку
К тому же, я всегда тестирую то, что даю другим, именно тот exe-файл, который даю, потому что часто бывает, что случайно забыл положить что-то в архив в спешке, или случайно взял не ту версию файла, или ещё что-нибудь в этом духе обнаруживается
Здравствуйте, FDSC, Вы писали:
WH>>Гм. Но ведь весь объект разрушается. И если кто-то будет ссылаться на поле разрушенного объекта то не всели равно что там? Всеравно будет большой бум ибо там может оказатся что угодно после того как память отдадут другому объекту..
FDS>У меня лично в моей практике программирования были случаи, когда обращение по этим областям не вызывало ни Access Violation, ни большого бума. На это место, например, мог быть случайно записан объект того же класса ну и дальше сами понимаете... да и даже если ничего не записано, если в адресном пространстве процесса в выделенных страницах, то, вроде, AV не должно возникать, а значения там могут остаться просто прежними
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, FDSC, Вы писали:
FDS>>Хм, программисту он должен. Я вот сейчас даже проверил — в VS 2005 генерирует WH>Как проверял?
Скомпилировал и посмотрел, компилит он код с инициализацией через конструктор, которого я не объявлял или нет
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, FDSC, Вы писали:
FDS>>Я, например, считаю, что программист вообще не должен думать о том, создастся или нет, если только он не занят оптимизацией. Благо, компилятор, вообще говоря, без труда может определить, используется ли где-нибудь значение i из i++ или нет. LM>А если i имеет тип отличный от инта?
Какая разница, если команда состоит только из одного "i++;"? "Куда" его тут использовать?
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, FDSC, Вы писали:
FDS>>Так, а чем вам i++ не угодило то? Честно скажу, когда я вижу ++i всегда заменяю на i++, потому что ++i раздражает LM>А системник выбираете по цвету корпуса. Розовый — это так гламурно...
Нет, у Юлии Савичевой образ антигламурности, а я как раз участник её ОФК
Здравствуйте, deniok, Вы писали:
D>Ага, давай закладывайся на это. Потом, после релиза, будешь долго объяснять, что у тебя в дебаге всё работало...
P.S. Такие обнуления наоборот помогают раньше выявить ошибку. Но смысла вашей фразы я всё равно не понял: что вы имели ввиду, что в релизе работать не будет...
Здравствуйте, FDSC, Вы писали:
FDS>>>Хм, программисту он должен. Я вот сейчас даже проверил — в VS 2005 генерирует WH>>Как проверял?
FDS>Скомпилировал и посмотрел, компилит он код с инициализацией через конструктор, которого я не объявлял или нет
Код покажи.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, deniok, Вы писали:
D>>Ага, давай закладывайся на это. Потом, после релиза, будешь долго объяснять, что у тебя в дебаге всё работало...
FDS>P.S. Такие обнуления наоборот помогают раньше выявить ошибку. Но смысла вашей фразы я всё равно не понял: что вы имели ввиду, что в релизе работать не будет...
Возможно я просто тебя не понял. Ты писал "про обращение по этим областям" здесь
Здравствуйте, FDSC, Вы писали:
FDS>>>Я, например, считаю, что программист вообще не должен думать о том, создастся или нет, если только он не занят оптимизацией. Благо, компилятор, вообще говоря, без труда может определить, используется ли где-нибудь значение i из i++ или нет. LM>>А если i имеет тип отличный от инта?
FDS>Какая разница, если команда состоит только из одного "i++;"? "Куда" его тут использовать?
Сразу видно, человек ни разу итераторы не писал Постфиксный оператор ++ обычно реализуется следующим образом:
T T::operator++(int)
{
T tmp(*this);
++*this;
return tmp;
}
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Sni4ok, Вы писали:
S>Здравствуйте, hunter_707, Вы писали:
_>>ссылка — далеко не самое удачное изобретение микрософта ...
S>вы настолько грамотны, что до сих пор верите, что стандарт с++ придумали майкрософт?
а вы действительно настолько наивны и до сих пор полагаете, что стандарты в данной области принимаются (или, что еще вернее, могут быть приняты) без него?
Здравствуйте, nixxxin, Вы писали:
N>Здравствуйте, Sergey, Вы писали:
S>>Ну для начала *f=*b не скомпилируется из-за приватного наследования.
N>Это почему это?
Потому что наследование приватное.
N>тут все ок.
VC8sp1
error C2243: 'type cast' : conversion from 'Bar *' to 'const Foo &' exists, but is inaccessible
N>Не скомпилится Foo* b=new Bar(200);
Это тоже.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, WolfHound, Вы писали:
WH>>Я честно говоря не помню что сказано в писании и мне лень там копаться но как насчет такого кода: WH>>
WH>>struct ABC
WH>>{
WH>> int& a;
WH>>};
WH>>int a = 123;
WH>>ABC abc = { a };
WH>>
WH>>VC++8 даже и предупреждения не выдал. А просто скомпилил и отработал как ожидалось.
FDS>Вообще-то компилятор должен, вроде, сам сгенерировать дефолтный конструктор ABC(int &)
_>>>ссылка — далеко не самое удачное изобретение микрософта ...
S>>вы настолько грамотны, что до сих пор верите, что стандарт с++ придумали майкрософт?
_>а вы действительно настолько наивны и до сих пор полагаете, что стандарты в данной области принимаются (или, что еще вернее, могут быть приняты) без него?
— проститет, а церковь тоже я разрушил?
— нет, это до вас ещё
Здравствуйте, deniok, Вы писали:
FDS>>P.S. Такие обнуления наоборот помогают раньше выявить ошибку. Но смысла вашей фразы я всё равно не понял: что вы имели ввиду, что в релизе работать не будет...
D>Возможно я просто тебя не понял. Ты писал "про обращение по этим областям" здесь
. Я имел ввиду, что обращение по областям, где был объект, время жизни которого ты не контролируешь — это потенциальные грабли.
Видимо не понял: я имею ввиду, что в C++ всегда есть вероятность, что ты по ошибке удалишь объект раньше, чем будет последнее к нему обращение. Что бы вероятность быстро выявить такое ошибочное обращение я и обнуляю указатели
Re[19]: Всем, кто поставил минусы, просьба отписаться - поче
Ну ладно, сдаюсь. Итераторы я писал (один или два ), но вот не на C++ и никогда для этого "++" не использовал
Но всё равно с int вполне можно и i++ использовать
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, FDSC, Вы писали:
FDS>>>>Хм, программисту он должен. Я вот сейчас даже проверил — в VS 2005 генерирует WH>>>Как проверял?
FDS>>Скомпилировал и посмотрел, компилит он код с инициализацией через конструктор, которого я не объявлял или нет
WH>Код покажи.
Нефига он не генерирует, только ABC(const ABC &)... меня переглючило, я просто сейчас на трёх языках пишу и всё нужно срочно: невнимательно посмотрел, что сам написал и что имел ввиду
Извините. Вот код, который у меня компилировался — сам не понял, что хотел этим кодом сказать :
#include"stdafx.h"#include <conio.h>
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
struct CCC
{
int &b;
int &c;
CCC(int &a, int &d): b(a), c(d)
{
}
};
struct ABC
{
public:
int &a;
};
int _tmain(int argc, _TCHAR* argv[])
{
int k = 2; int c = 0;
CCC d(k, c);
ABC * D = (ABC *) &d;
ABC A(*D);
cout << A.a << endl;
k = 22;
cout << A.a << endl;
_getch();
return 0;
}
Здравствуйте, FDSC, Вы писали:
FDS>Но всё равно с int вполне можно и i++ использовать
Да, с int можно. С указателем можно. Только никто не обещает, что сегодняшний указатель завтра не превратится в какую-нибудь хитрозагнутою фигню. Как это случалось, например, с std::vector<>::iterator при переходе с VC 6 на VC 7. Ну и зачем искуственно создавать трудности? На оптимизатор особо надеятся тоже не следует — во-первых, выкинуть временный объект он сможет далеко не всегда. Во-вторых, желательно чтобы дебаг тоже работал не слишком медленно — потому что отлаживать обычно приходится именно его. Итого, имеем 2 варианта — 1) при наличии выбора использовать постфиксный инкремент для интегральных типов и префексный — во всех других местах. 2) при наличии выбора везде использовать префиксный инкремент. Разумеется, второй вариант практичнее. А ваше эстетическое чувство пострадает от обоих вариантов примерно одинаково Мое эстетическое чувство так вообще от первого варианта страдает больше. До кучи, в первом варианте еще и думать больше. То ли там с дуру так написали, то ли тип интегралный, то ли действительно результат оператора важен. Во втором — увидел постфикс, включается повышенное внимание — результат оператора сразу используется.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Erop, Вы писали: E>А какие выводы надо сделать?
Каждому свои
У меня от них отрицательные впечатления. 7 часов собеседование. Все мозги промыли своими алгоритмическими и логическими задачами. В конце сказали, что им требуется, всего навсего, разработчик графического интерфейса пользователя. За полгода не смогли дать ни какого ответа. Первые 3 месяца напоминал о себе, но получал шаблонный ответ, что решение не принято, ждите. Я сделал выводы о непривлекательности, для меня, такого не серьезного работодателя.
Здравствуйте, landerhigh, Вы писали:
L>Здравствуйте, puremind, Вы писали:
L>Кстати, а какой правильный ответ на вопрос, поставленный как "Неявное преобразование типов"? Требуется написать реферат или что?
Реферат? боже упаси там 4 или 5 правил всего определяющих приоритет преобразований ... сейчас посмотрю точно ..
Страуструп. $7.4 стр 192 ... я это имел ввиду .. да и то заученного ответа тоже не оджидается ... хотябы понимание проблемы ...
Здравствуйте, kittown, Вы писали:
P>>А это уже реальный косяк! .. =)
K>Не слишком. Полгода поработав на другом языке, подобную мелочевку (а это именно мелочевка, непринципиальные фичи) можно и забыть.
Единого мнения здесь быть не может, у меня одно у вас другое. Лично мое мнение что это фича — реально способно увеличить качество кода и скорость его отладки. Если вы с этим не согласны, то как говорится увы ... мы с вари разошлись во взгядах.
P>>и понимание основных механизмов языка (в мсдн-е не дают) это не тоже самое что и знание кактой то апишной функции которую действительно можно посмотреть в справочнике ....
K>Основные механизмы в C++ в точности те же, что и в обычном Си. От слова "основные". Все остальное — дополнительные и необязательные фичи. В некоторых компаниях они возводятся в фетиш и активно разбавляются не менее интересными внешними инструментами а-ля буст. В некоторых других компаниях значительная часть фич языка (вплоть до stl) просто запрещается к использованию, и никаких катастроф от этого не происходит. Это не самые существенные детали, и уж тем более не основы.
Вопрос, не в катастрофе а в эффективности. Некторые исповедуют одну методологию — другие другую. Я отчасти понимаю людей которые считают что сем проще тем лучше — но не всегда я ними согласен.
K>Я иногда принимаю экзамены по c++ для студентов, которые в силу бытия студентами знать его даже наполовину не могут в принципе. Из них многие легко ответят на ваши вопросы, а потом некоторые напишут вот это:
K>
Забавный код, но ведь вопросы — это всего лишь предварительный этап. И по мере продвижения вперед становятся сложнее и не только с теоретической точки зрения, но и с ... хм .. в общем вопрос для ответа на которые нужно иметь некоторый опыт в срефе деятельности.
Плюс есть испытательный срок.
Плюс Плюс — никто не застрахован от ошибок.
Кстати про код, он хорош по край ней мере в одном, с первого взгляда видно что он совершенно не эффективен — (ошибки не искал) ...
K>Михаил
Здравствуйте, FDSC, Вы писали:
FDS> Как только ушёл от этого языка — сразу забывать начинаешь.
Один китайский афоризм гласит (примерно):
"Вершу используют для ловли рыбы: когда рыба поймана,
вершу отбрасывают. Силок нужен — чтобы поймать
зайца: когда заяц пойман, про силок забывают.
Слова нужны — чтобы познать смысл: когда смысл
познан — слова забывают. Где мне найти человека,
забывшего слова, чтобы поговорить с ним!".
Ситуация когда "знал, но подзабыл делати" — не страшна.
Главное знание принципов и базы, понимание как все
это работает и создается. Остальное "вытаскивается
из кэша" при подготовке к выполнению конкретного
задания, с учетом требований и набора технологий,
которые планируется использовать в конкретно этом
проекте.
FDS> Мне безразлично на каком языке я программирую, но это не FDS> значит, что я знаю все тонкости и даже просто все FDS> основные концепции программирования на C++, хотя FDS> писал на нём нормально работающие программы.
Язык (как язык общения, так и язык программирования)
представляет собой прикладное средство, предназначенное
для решения конкретных проблем. Средства языка не
являются равнозначными: какие-то вещи более важны
и их используют все — другие использует один процент
программерского населения. Существует некоторое
минимальное подмножество, которое реально необходимо
и достаточно для написания качественного и отвечающего
требованиям приложения кода — остальное для супер-пупер-
теоретиков — лингвистов — знатоков стандартов "с закрытыми
глазами", носителей "идеологии" языка — его развивателей
и (нас практиков) просветителей.
FDS> Для того, что бы знать C++ мне нужно программировать FDS> на нём нечто относительно сложное и в коллективе, FDS> что бы шёл обмен опытом.
Плюс к этому — практически в каждом коллективе это будет
свой собственный "диалект" С++. Свой набор (суб)технологий.
Свой набор библиотек, которые в свою очередь также
оказывают существенное влияние на С++-язык говорящих.
Здравствуйте, puremind, Вы писали:
P>Единого мнения здесь быть не может, у меня одно у вас другое. Лично мое мнение что это фича — реально способно увеличить качество кода и скорость его отладки. Если вы с этим не согласны, то как говорится увы ... мы с вари разошлись во взгядах.
Ну, скажем, если я забыл какую-то возможность языка, но помню о её существовании, то я всё равно смогу её применить
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, puremind, Вы писали:
P>>Единого мнения здесь быть не может, у меня одно у вас другое. Лично мое мнение что это фича — реально способно увеличить качество кода и скорость его отладки. Если вы с этим не согласны, то как говорится увы ... мы с вари разошлись во взгядах.
FDS>Ну, скажем, если я забыл какую-то возможность языка, но помню о её существовании, то я всё равно смогу её применить
Можно чтото и забыть, но инициализация членов класс к таким фичам явно не относится.
Можно например забыть про частичную специализацию — где она есть а где ее нет =)
Здравствуйте, trophim, Вы писали:
T>Хочу 1,5 и больше. Про шаблоны говорить не буду. Переманите меня из Ростова.
Не разменивайся. С твоим опытом В С++ можно больше 2000 сразу поднять. Научись себя больше ценить.
Здравствуйте, puremind, Вы писали:
L>>Кстати, а какой правильный ответ на вопрос, поставленный как "Неявное преобразование типов"? Требуется написать реферат или что? P>Реферат? боже упаси там 4 или 5 правил всего определяющих приоритет преобразований ... сейчас посмотрю точно .. P>Страуструп. $7.4 стр 192 ... я это имел ввиду .. да и то заученного ответа тоже не оджидается ... хотябы понимание проблемы ...
Мне подобные вопросы всегда напоминают анекдот про сороконожку, у которой спросили, как они умудряется одновременно передвигать все свои сорок ног
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, deniok, Вы писали:
D>>Ага, давай закладывайся на это. Потом, после релиза, будешь долго объяснять, что у тебя в дебаге всё работало...
FDS>Не понял о чём речь. Эти случаи были в Delphi, которая не делит как VisualStudio версии на релизные и отладочные. Когда я программирую на C++ ПРАКТИЧЕСКИ НИКОГДА не использую отладочный режим: он усложняет отладку
А как же Вы "неотладочный код" отлаживаете?
О! Есть еще один специфический "геммор": включаемая в релизной сборке система защиты от отладки-взлома-нелицензионного ипользования Т.е. релизный код неотлаживаемый _в_принципе_ — непригоден для отдадки и все тут. Вот тут-то и приходится "изворачиваться и подпрыгивать"...
FDS>К тому же, я всегда тестирую то, что даю другим, именно тот exe-файл, который даю, потому что часто бывает, что случайно забыл положить что-то в архив в спешке, или случайно взял не ту версию файла, или ещё что-нибудь в этом духе обнаруживается
А при чем тут, собсвенно, тестирование? Тестируется релизная версия — это и коню понятно — зачем тестерам отладочную версию "тестировать"?
Здравствуйте, The Lex, Вы писали:
TL>Здравствуйте, FDSC, Вы писали:
FDS>>Не понял о чём речь. Эти случаи были в Delphi, которая не делит как VisualStudio версии на релизные и отладочные. Когда я программирую на C++ ПРАКТИЧЕСКИ НИКОГДА не использую отладочный режим: он усложняет отладку
TL>А как же Вы "неотладочный код" отлаживаете?
Здравствуйте, Александр Каширин, Вы писали:
АК>Здравствуйте, The Lex, Вы писали:
TL>>Здравствуйте, FDSC, Вы писали:
FDS>>>Не понял о чём речь. Эти случаи были в Delphi, которая не делит как VisualStudio версии на релизные и отладочные. Когда я программирую на C++ ПРАКТИЧЕСКИ НИКОГДА не использую отладочный режим: он усложняет отладку
TL>>А как же Вы "неотладочный код" отлаживаете?
АК>Я бы предположил, что по логам.
Я тоже, но тогда стоит н-ное количество вопросов, начиная с вопроса производительности и заканчивая вопросом ограничения логгирования у конечного клиента...
Здравствуйте, Ulter, Вы писали:
U>У меня от них отрицательные впечатления.
А у меня — положительные
U>7 часов собеседование. Все мозги промыли своими алгоритмическими и логическими задачами.
Есть такое.
U>В конце сказали, что им требуется, всего навсего, разработчик графического интерфейса пользователя.
Точно? Или может сказали, что нужен разработчик в _группу_ пользовательского интерфейса? Это не совсем то же самое
U>За полгода не смогли дать ни какого ответа. Первые 3 месяца напоминал о себе, но получал шаблонный ответ, что решение не принято, ждите.
Странно.. А давно ли это было? Есть подозрение, что впечатления сильно устарели..
Здравствуйте, Keen the Green, Вы писали:
KTG>Здравствуйте, Ulter, Вы писали:
U>>У меня от них отрицательные впечатления. KTG>А у меня — положительные
U>>7 часов собеседование. Все мозги промыли своими алгоритмическими и логическими задачами. KTG>Есть такое.
U>>В конце сказали, что им требуется, всего навсего, разработчик графического интерфейса пользователя. KTG>Точно? Или может сказали, что нужен разработчик в _группу_ пользовательского интерфейса? Это не совсем то же самое
U>>За полгода не смогли дать ни какого ответа. Первые 3 месяца напоминал о себе, но получал шаблонный ответ, что решение не принято, ждите. KTG>Странно.. А давно ли это было? Есть подозрение, что впечатления сильно устарели..
Это об АББИ? Я туда заходил чисто по приколу, поскольку заранее знал, что по их правилам попадаю на мелкую зарплату. Странные они люди, задачи я им быстро решил, а потом один из менеджеров мне долго доказывал, что я не имею понятия об ООП и остановился в развитии на уровне структурного программирования, поскольку последнее время я работал с С, хотя на С можно прекрасно писать в ООП стиле.
Другой потом зачем-то принижал свой отдел — типа они только и делают, что меняют параметры в функциях и смотрят, не стал ли лучше процесс распознавания.
Здравствуйте, Keen the Green, Вы писали:
U>>В конце сказали, что им требуется, всего навсего, разработчик графического интерфейса пользователя. KTG>Точно? Или может сказали, что нужен разработчик в _группу_ пользовательского интерфейса? Это не совсем то же самое
За давностью не буду настаивать на своем варианте...
U>>За полгода не смогли дать ни какого ответа. Первые 3 месяца напоминал о себе, но получал шаблонный ответ, что решение не принято, ждите. KTG>Странно.. А давно ли это было? Есть подозрение, что впечатления сильно устарели..
А было это в январе 2007 года, ответа пока нет...
Здравствуйте, Sergey, Вы писали:
S>Здравствуйте, FDSC, Вы писали:
S>Может ли (согласно стандарту, про реальные компиляторы пока не будем) скомпилироваться такой код:
S>
S>void Foo::bar(int a = 4, int b)
S>{
S>}
S>
S>И когда соискатель заявит, что не может (это вам в форуме понятно, что раз вопрос задан в качестве коварного, то ясен пень что оно скомпилироваться обязано, а на собеседовании все выглядит совсем по-другому), следом еще один вопрос — что надо написать в декларации класса, чтобы оно скомпилировалось. Вот это я понимаю, и коварно, и бессмысленно — потому что никто в здравом уме такого не напишет. Хуже вопрос только про ++i++ и скобки
error: default argument missing for parameter 2 of `int
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
Здравствуйте, Мезенцев Владимир Андреевич, Вы писали:
МВА>Однозначно ПТУ, к колледжах такое ***** на дипломку не дают, на курсовик и тот не тянет.
Наивные
У нас в политехе (правда вечерний) девушка защитила диплом такого типа: имеется HTML-форма, где выбирается тип лампочек и объём помещения, а далее фигулька на PHP (это и есть ядро системы ^^) зная мощность лампочек вычисляет, во скока обойдётся освещение выбраной комнаты. у и добавлю, что она ни строчки не написала сама — она не знает даже, что такое PHP. Да, и никого она не подкупала — так прокатило. А вы говорите... Походу деградация полная наступила, писец короче.