- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
struct Dir {
Dir(const char* name) {
d = opendir("/var/log");
}
~Dir();
const char* next();
bool operator== (DIR* other);
private:
DIR* d;
};
...
Dir var_log("/var/log");
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1001
struct Dir {
Dir(const char* name) {
d = opendir("/var/log");
}
~Dir();
const char* next();
bool operator== (DIR* other);
private:
DIR* d;
};
...
Dir var_log("/var/log");
у нас в софтине в одном месте одна константа всегда была 0. потом ей дали другое значение - сразу в стольких местах повылазило что народ на протяжении многих лет вместо этой константы просто 0 писал. и более того нашлось место где код ожидал что константа будет 0 и использовал ее не по назначению вместо 0.
это часто происходит когда пишется навороченно абстрактный код, который в жизни используется только по одному конкретному назначению. почему я и пытаюсь народ учить сначала писать конкретный код и потом из него по мере необходимости делать абстрактный, переиспользуемый, а не наоборот. ан нет, крутых книжек поначитаются и начинают городить огороды.
Просто я бы делал opendir() не в конструкторе, а в другом методе, чтобы можно было заранее обработать ошибку на этом этапе.
ололо! а для чего ж они?
Надеюсь, Вы не из тех макак, которые всё API строят на эксепшенах, называя это "архитектурой сооьшений"?
Почитайте Страуструпа. Раздел 14.5.
P.S. Надеюсь, Вы тоже не обезьяна. А то с приматами общаться не получается.
while (someCondition) {
...
if (poraVihodit) someCondition = false
1.) Если делать с дополнительной переменной в условии надо будет добавлять эту переменную во все уловиях для уровней вложения (кроме разве что последнего), что вообще говоря неудобно
2.) Лично мне goto будет действительно удобнее воспринимать во многих ситуациях, чем с дополнительной переменной в условиях.
3.) Хоть это и копейки, но компьютеру надо будет выполнять меньше операций на полный цикл.
Т.е. это оптимальнее, нагляднее и быстрее пишется для рассмотренного случая, чем добавление переменной в условия. Хотя справедливости ради стоит заметить, что, как уже сказали выше, эту же проблему можно решить вынеся эти циклы в отдельную функцию, на что некоторые с дуру могут возразить, что это спровоцирует дополнительные вызовы функций, что в свою очередь можно решить добавив inline по надобности.. однако это решение иногда делает код менее наглядным, либо требует передачи тонны переменных туда и обратно, что тоже иногда очень неудобно.
Однако, IMHO, это вопрос строго стиля программирования. И спорить на эту тему абсолютно бесполезно. А единственные две объективные величины для хуже/лучше, которые мы можем замерить это:
1.) производительность;
2.) работоспособность.
Конкретно в данном случае меняется только первое. Соотвественно, единственное, что можно делать при стремлении к идеалу, в данной ситуации надо, IMHO, просто проверять что выполняется быстрее. Но, как известно, если слишком сильно загоняться на оптимальности, код становится иногда слишком сложночитаемым... я, конечно, извиняюсь, что озвучиваю столь очевидные вещи, однако похоже, тут некоторые анонимусы любят принимать решения строго на религиозных соображениях.
ты код также пишеш? китаец штоле?
А комментарии — да!:)
Насчет догматов — они хороши при первоначальном ознакомлении с предметом, для выработки ориентиров. Потом, когда научаешься отличать «добро» от «зла», приходит осознание, что мир серый, и что из любого правила будут исключения.
Это нормально, это вроде как в БИ концепция сю-ха-ри. Ненормально, когда индивидуум застревает на этапе «сю».
Выкладываю результат по ссылке:
try
{
Dir d("/path/to/gigantic/hui");
}
catch(super_exc e)
{
}
так чтоли?
А если такая область видимости не подходит?
Объект - это по сути любой экземпляр класса, структуры или встроенного типа.
В С++ ключевые слова class и struct взаимозаменяемы. Разница только в правах доступа по-умолчанию к членам.
В структурах - public, в классах - private.
Тогда, спрашивается, нахрена нам нужны классы вообще? Если теперь модно у структур делать методы. Не совсем уверен насчёт наследования, оно там есть? (Искать лень, если честно, да и не настолько я цппбой).
Второй вопрос. Если у классов - объекты, что тогда у структур? Структуры?
Есть.
В С++ структуры почти не отличаются от классов.
Отличаются лишь тем, что в классе всё поумолчанию имеет private модификатор, а структуре public.
Ух ты, какие серьезные вопросы на говнокоде обсуждаются