- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
const int size=8;
class Bin
{
public:
Bin();
private:
char first[size];
char second[size];
};
Bin::Bin()
{
for (int s=0;s<=size;s++, first[s]='0');
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+61.8
const int size=8;
class Bin
{
public:
Bin();
private:
char first[size];
char second[size];
};
Bin::Bin()
{
for (int s=0;s<=size;s++, first[s]='0');
}
Вот вам смешно? А я пару часов думал почему при заполнении одного вектора меняется другой...
guest 23.10.2009 14:14 # +1
но первый элмент точно
guest 23.10.2009 14:54 # +1
Barmaglot 23.10.2009 15:11 # +2
guest 23.10.2009 16:50 # 0
так не возникнет
guest 23.10.2009 17:12 # +1
interested 23.10.2009 18:06 # 0
Лучше всегда использовать префикс, так как он не должен создавать временное значение, чтобы его вернуть.
Если вы используете классический С-массив, то зачем вам врЕменная переменная s?
Barmaglot 23.10.2009 18:06 # 0
Смешно.
interested 23.10.2009 18:19 # +1
Не пользуйте C-массив -- есть valarray, не заполняйте его сами -- используйте конструктор, не используйте константы -- используйте шаблоны.
Пишите на С++ =]
Barmaglot 23.10.2009 18:56 # +1
Вот код автора с минимальной переделкой, в котором не может быть двух найденных ошибок:
#include <algorithm>
using namespace std;
const int size=8;
class Bin
{
public:
Bin();
private:
char first[size];
char second[size];
};
void myPolicy(char& myValue)
{
myValue = '0';
}
Bin::Bin()
{
for_each(first, first + size, myPolicy);
}
guest 23.10.2009 20:31 # +2
guest 23.10.2009 20:31 # 0
interested 23.10.2009 20:52 # 0
Однако, большинству программистов valarray не нужен.
http://www.cplusplus.com/reference/std/valarray/
guest 23.10.2009 21:24 # 0
guest 24.10.2009 13:28 # 0
Barmaglot 24.10.2009 16:51 # 0
guest 24.10.2009 19:40 # +1
http://steps3d.narod.ru/tutorials/c-minus-minus.html
Sauron 25.10.2009 12:50 # 0
Со временем пришло понимание, что на С++ иначе просто нельзя !!! Средства, изначально заложенные в сам язык, настолько негибки и жестки, что реализовывать системы, требующие гибкости на С++ было крайне тяжело и постояннно приводило к кривым способам (т.е. это бага а фича :)).
Ну что можно сказать, дальше можно уже не читать, а автору сего высера советую взглянуть на Qt и удавится
guest 25.10.2009 13:49 # 0
Увидеть Париж и умереть :-)
Пора бы вспомнить, что Qt - это как раз НЕ C++, это надстройка над C++. А точнее это отчаянная попытка преодолеть отсутствие в нём элементарных средств вроде делегирования.
guest 25.10.2009 14:42 # 0
Sauron 25.10.2009 16:53 # 0
guest 27.10.2009 22:40 # 0
pushkoff 28.10.2009 12:04 # 0
Barmaglot 25.10.2009 13:47 # 0
Не нравится автору STL - так никто не неволит, используйте сторонние библиотеки. Loki и Boost - произведения искусства, почему не сосредоточится на них в рассмотрении?
Про ссылки вообще смешно - если синтаксис языка говорит о том, что нужно использовать "&" для передачи параметра по ссылке, а мы об этом забыли... Это говорит о большой харизме.. ой, простите, маразме :-)
То же относится к проблемам старых компиляторов. Мы что, историю изучаем, или выбираем инструмент решения задачи?
Да, C++ не лишен недостатков, и граблей в нем огромное количество, и для изучения он не прост. Для определенного круга задач, однако, он остается оптимальным инструментом. При следовании набору правил, на C++ пишутся программы, поведение которых жестко детерминировано. Например, я точно знаю, когда создается объект, когда его копия, когда он уничтожается и даже откуда берется память для его размещения. При этом бо`льшую часть ошибок, действительно проверяет компилятор еще до запуска программы.
guest 25.10.2009 14:48 # 0
Barmaglot 25.10.2009 19:42 # +1
Если не знаем как пользоваться спецификатором &, вероятно, лучше почитать умных книжек, прежде чем садиться писать программы.
generalgda 25.10.2009 23:04 # +1
interested 26.10.2009 08:45 # 0
Интересно, а в каком языке он достиг наивысшего дао?
Или для его задач пока не придуман хороший язык высокого уровня, и "дядька" занимается его созданием?
generalgda 26.10.2009 22:58 # 0
interested 26.10.2009 09:03 # +3
К сожалению я опоздал...
Тут уже много написано. Что-то по делу, что не по делу...
Главная мысль, которую следует усвоить: каждая сущность создана для чего-то, и у каждой сущности есть своё место. Так вот C++ по скорости разработки и эффективности в определённых задачах не сравним с другими языками. Он универсален, и его можно применять и на космической станции и для подсчёта носков в магазине. Но для решения каждой конкретной задачи могут существовать свои средства. Зачем вам C++ , если вы не считаетесь с машинными средствами? Зачем вам С++, если вас не волнует расширяемость и гибкость системы? Зачем вам С++? Какую задачу вы хотите решать? В каких вы находитесь временных рамках? Какими вы располагаете ресурсами? Аккуратно проанализировав ситуацию, вы придёт к заключению о том, на каком именно языке вы будете что-то реализовывать. Это может быть и машинный язык, и MSIL, и fortran, и C, и С++, и Java, и Python, и LISP, и Neko или Javascrpit, Perl или PHP, и ещё огромный спектр языков...
Фанатизм пока что помогал людям только в борьбе между собой за территорию. Кроме "корытных" проблем, бывают ещё и "звёздные" задачи.
generalgda 26.10.2009 23:00 # 0
guest 23.10.2009 21:39 # −1
guest 24.10.2009 00:56 # −1
можно еще так)
guest 25.10.2009 03:37 # 0
Barmaglot 25.10.2009 13:51 # 0
guest 25.10.2009 14:39 # 0
guest 25.10.2009 14:39 # 0
pushkoff 25.10.2009 18:50 # 0
Barmaglot 25.10.2009 19:32 # 0
pushkoff 25.10.2009 20:20 # 0
pushkoff 25.10.2009 20:21 # 0
Barmaglot 26.10.2009 18:26 # 0
pushkoff 26.10.2009 20:13 # 0
Barmaglot 27.10.2009 00:20 # 0
> если это POD класс, но проблемы невозможны... в остальных случаях программист идиот...
но отличить POD от не POD не всегда получается сразу :-)
Могу с уверенностью сказать: в компиляторе C++ VS6 объекты с перегруженными new и delete ведут себя нестабильно после memset'a: вместо перегруженного для класса вызывается глобальный delete, со всеми вытекающими.
pushkoff 27.10.2009 11:23 # 0
а еще я думаю, что у комипилятора VS6 есть достаточно качественные новые версии, которые более соответствуют стандарту...
guest 25.10.2009 19:43 # 0
pushkoff 25.10.2009 20:24 # 0
guest 25.10.2009 19:44 # 0
pushkoff 25.10.2009 20:27 # 0
meriados 26.10.2009 00:28 # 0
проблема была в том что надо было size-1 в условии поставить. и присваивание внутри цикла.
guest 26.10.2009 16:32 # 0
guest 26.10.2009 18:37 # 0
for (int s=0;s<size;++s) {
first[s]='0';
}
И почему мемсет не подойдёт? Дайте пруфлинков на возможные проблемы. Ведь если не заходить за границы массива - ничего случиться не должно.
pushkoff 26.10.2009 20:12 # 0
Barmaglot 27.10.2009 00:29 # 0
Почитать эту занимательную историю более развернуто можно у Герба Саттера в задачах по C++.
g26g 27.10.2009 09:59 # +2
о каких последствиях memset здесь может идти речь?
развели дискуссию ни о чем. для разных задач - свои инструменты, и не надо религиозные вопросы поднимать по каждому поводу.