AgeNT
Ты вот знаешь как класс будет делаться? Как в файл пихаться будет? Нато и плюс Си, что он более низкоуровневей...
на С скорость грохнуть - надо постараться, на С++ наоборот - надо его хорошо знать чтобы писать быстрый код. Ну и ещё дофига отличий. Например, если в C я напишу (float*)some_array, то я точно знаю что адрес начала массивы будет задействован как указатель на float (конечно, это не относится к вызову функции, получающей указатель на другой тип), а в С++ преобразователь типа моет быть переопределён и заранее нельзя сказать что произойдёт. С одной стороны это удобно, но это - лежащие грабли, которые нужно обходить (или наступать на них, кому как больше нравится), т.е. делать дополнительные действия.
уже предвижу посты вроде "крепкий косяк" и т.д....
st0ke
что значит "как класс в файл пихаться будет"?
keltar
> на С скорость грохнуть - надо постараться, на С++ наоборот
начинающие программисты "грохают скорость", когда начинают не по существу пользоваться сложными вещами
в С этих вещей нет, и чтобы их сделать - надо именно постараться
в С++ они есть
и не надо хорошо знать С++, чтобы написать на нем сишную программу, в которой "скорость грохнуть - надо постараться"
> адрес начала массивы будет задействован как указатель на float
че?
some_function(float*);
sometype i;
some_function((float*)&i);
в с++ для sometype может быть переопределён operator float*(), и заранее нельзя сказать какое действие будет произведено и получим ли мы адрес объекта
keltar
здрасьте
как ты для указателя переопределишь приведение?
к тому же в С++ на этот случай есть reinterpret_cast
а static_cast, по определению, - статически разрешаемое приведение типа по заданному алгоритму. переопределяя приведение ты как раз задаешь этот алгоритм
С-style кастом вообще лучше не пользоваться
> в с++ для sometype может быть переопределён operator float*(), и заранее нельзя сказать какое действие будет
> произведено и получим ли мы адрес объекта
он что переопределится случайным образом?
xmvlad
а ты помнишь все определения для сотни классов? сомнительно
AgeNT
>С-style кастом вообще лучше не пользоваться
почему? юзаю везде либо его, либо dynamic_cast, и юзать static_cast смысла не вижу. Вот только не надо приводить аргумент страуса (или это не он писал?) что stati_cast писать больше и поэтому заставляет задуматься нужен ли он
keltar
static_cast разрешает делать меньше преобразований, чем C-style cast, т.е. более "безопасен"
он лучше вписывается в синтаксис С++ (выглядит как шаблонная функция, а не как какие-то скобочки)
его легко найти текстовым поиском
st0ke
>Ты вот знаешь как класс будет делаться? Как в файл пихаться будет? Нато и плюс Си, что он более низкоуровневей...
А чего тут такого страшного. В принципе, при разработке ОС на C++, отказаться нужно от: исключений, глобальных переменных, менеджера памяти(кста, его можно и нужно в последствии реализовать), RTTI, ну и конечно от стандартной библиотеки которая требует CRT(и это тоже поправимо), плюс мелочи которые я забыл упамянуть. Но зато в итоге мы получаем все остальные прелисти С++: ООП, шаблоны и прочее... А скорость и размер финального кода - зависит в большей степени от программиста.
uns
Ось тоже лучше писать на С++.
Код на С++ быстрее чем на С например из-за шаблонных функций а не указателей
на функцию.
Также код(скомпилированный) на С++ не имеет больший размер чем С.
Страуструпа читайте http://public.research.att.com/~bs/.
keltar
Рассмешил.
А чё это при написании оси нелья пользоваться исключениями например?
Cadaverillo
>Ось тоже лучше писать на С++.
Ты писал? Ты знаешь вообще хоть что-то кроме Страуса?
Я думаю он просто пытается раскрутить свой язык, вот и всё....
> из-за шаблонных функций а не указателей на функцию.
Чем это указатель на функцию и шаблон функции схожи?
>Страуструпа читайте http://public.research.att.com/~bs/.
Маркетинг дело сложное, он же програмист => знает алгоритм зарабатывания денег
>Также код(скомпилированный) на С++ не имеет больший размер чем С.
Ага, особенно если заюзать шаблоны! Проверь! Тока не не компилятором от Micro$oft, а то я буду тестить С++ на компиляторе паскаля ;)
>Код на С++ быстрее чем на С
Приведи примеры? Кстати не думал почему многие пишут ОС на Си? Тот же Линус, или мой нелюбимый M$???
>keltar
>Рассмешил.
Ты пару месяцев прогаешь на С++ более-менее. Что вы вообще можешь знать? Прочитал пару доков? Почитай доки по Си, прийдёшь в радость, они маленькие, простые...
Daevaorn
>все остальные прелисти С++: ООП, шаблоны и прочее..
ООП и на Си есть. Недавно писал, как можно аналог классов сделать через стурктуры...
>что значит "как класс в файл пихаться будет"?
Ну как при компилинге будет выглядеть код проги? Я вот точно знаю что всё будет как мне надо и ничего лишнего.
st0ke
> Ага, особенно если заюзать шаблоны! Проверь! Тока не не компилятором от Micro$oft, а то я буду тестить С++ на компиляторе паскаля ;)
шаблоны не генерят лишнего кода
это программеры иногда генерят лишние шаблоны
никакой Паскаль не писал компиляторов для С++ :)
> Приведи примеры? Кстати не думал почему многие пишут ОС на Си? Тот же Линус, или мой нелюбимый M$???
что представлял собой С++ на момент создания этих ОС?
> ООП и на Си есть. Недавно писал, как можно аналог классов сделать через стурктуры...
в таком случае ООП можно и на ассемблере сделать
но это не аргумент в пользу ассемблера
> Ну как при компилинге будет выглядеть код проги? Я вот точно знаю что всё будет как мне надо и ничего лишнего.
максимум, чем С++ класс будет отличаться от С структуры - это vftp
Cadaverillo
>Рассмешил.
а ты то меня как рассмешил :), ты наверное знаешь С++ лучше всех. Хотя я ещё помню как ты указатель на 20 байт сдвинуть не мог - а учил бы С, нивжизь бы такой проблемы не было, т.к. там без знаний этого писать нереально. Т.е. научился бы методом "выкручивания рук", и никогда бы уже не забыл
AgeNT
>шаблоны не генерят лишнего кода
угу, это делает компилятор когда их раскрывает :)
>это программеры иногда генерят лишние шаблоны
это делают то которые Александреску начитались :)
исключения и на С можно бросать, читайте man 3 setjmp, man 3 longjmp. Хотя в ядре ОСи я бы 256 раз подумал прежде чем делать это...
таблицы виртуальных функций тоже вручную можно - через структуры с указателями на функции. Неудобно, но наглядно :)
а вот generic programming на С делать очень сложно, по надеюсь понятным причинам.
Тема в архиве.