C++

fixxxer

К.О.
Партнер клуба
Я все же считаю, что приведенные примеры достаточно сложны для понимания, если сравнивать с С или Java - хотя бы по числу сущностей, которые необходимо понимать.

И при этом, для С++ в целом они тривиальны :)

Кстате, не путайте C++ и stl или boost которые к самому языку никакого отношения не имеют.
1) Если считать, что С++ - это то, что описано в соответствующем стандарте, - то как раз (частично) имеют (см. ISO/IEC 14882:2003). про c++11 с его смайликами лучше, полагаю, умолчать
2) Знание С++ при незнании STL и boost - это то же самое, что знание Java без знания инфраструктуры: толку-то.
 

whirlwind

TDD infected, paranoid
Не надо пугать народ. Мнениё у каждого канеш свое, но в принципе любой императивный язык для императивного программера это фигня - открыл мануал и ты в теме. Другое дело - разные парадигмы. Например у perl не совсем императивный подход к делу - существует 100500 вариантов изложения одной и той же мысли, а причина банальна: Ларри Уолл - натурально человеческий лингвист и язык у него натурально лаконично контекстный. Для императивного программера достаточно мануала. Особенно по Java - набрал лексему в гугле и получил доку на java-api. Другое дело, что мультитрединговое программирование особо в мануалах не опишешь. Но это уже далеко не язык. И это все фигня. Вот я например никак к функциональным не подберусь ибо чуствую ломка будет покруче чем с процедурки на ооп перелазить.
 

fixxxer

К.О.
Партнер клуба
Да я не пугаю. В любом случае надо идти последовательно, ну то есть рано читать Александреску если не знаешь чем *x от &x отличается :) А так то конечно язык как язык, костылей только многовато:)

Что касается функциональщины и ООП - есть мнение, что легкие процессы ерланга - это как раз полноценные объекты в изначальном смысле
 

tz-lom

Продвинутый новичок
Шаблоны штука сложная тем что плодит кучу классов, если где то появится не тот класс - вывалится тонна невменяемых сообщений совершенно не о том что шаблон написан или используется не правильно.
 

Absinthe

жожо
Кстате, не путайте C++ и stl или boost которые к самому языку никакого отношения не имеют.
Boost - правильно, не имеет.
А вот STL - часть C++. Если не веришь - открой спеки.
 

phprus

Moderator
Команда форума
Ну вот например что такое и в каких случаях следует использовать auto_ptr, shared_ptr, weak_ptr?
Так auto_ptr теперь deprecated и его использовать не рекомендуют. (Правда каюсь грешен, у меня в одном сервере auto_ptr используются для гарантии разрушения объектов, если вылетит птичка(exception). Но пришлось этот auto_ptr допилить, чтобы он принимал еще и функцию для удаления, а не тупо delete вызывал).
shared_ptr - умный указатель с подсчетом ссылок. можно использовать, когда нужно поддерживать несколько "указателей" на один объект так, чтобы объект был разрушен после разрушения последнего "указателя".
weak_ptr - а это и не указатель вовсе. Так, слабая ссылка. Предназначен, например, для решения проблемы циклических ссылок, в случае если используются shared_ptr. Например указатель на детей в дереве - это shared_ptr, а на родителей - weak_ptr. weak_ptr позволяет проверить жив ли еще объект на который указывает и если жив, то получить на него shared_ptr для реального использования.

Ничего я не забыл и не наврал? :)


whirlwind
Авто поинтер надо использовать всегда. Важно только понять как оно работает. А работает оно по принципу того, что деструктор вызывается при выходе переменной из области видимости, соответственно деструктор автоптр это возможность освободить память сложной структуры, которая по сути не важна ибо шаблон либо класс - все!
Нет! auto_ptr в С++ очень вредный класс, так как реализует логику "разрушающего" копирования. Если скопировать auto_ptr, то старый auto_ptr перестанет содержать значение, и передаст его новому. Из-за этого auto_ptr не совместимы с контейнерами STL, да и при передаче их в функцию(возвращении из функции) надо быть очень внимательным.


PS. Кстате, не путайте C++ и stl или boost которые к самому языку никакого отношения не имеют.
STL - это часть языка С++.
 

fixxxer

К.О.
Партнер клуба
Во, спасибо, хоть кто-то мне понятно объяснил про все эти ptr_ы :)
 

whirlwind

TDD infected, paranoid
phprus если обратите внимание на мой код, то там указатели некопируемые. Если вы копируете указатели, то нахрена вам вообще врапперы над указателями? Копируйте указатели напрямую - проблемы те же самые, только гемора меньше.

STL - это библиотека. Оно так и переводится - Standard Templates Library. Надеюсь не надо объяснять, что любой язык прекрасно работает без всяких библиотек. Упирание что STL часть языка это демагогия. На уровне: php без pear не язык, perl без cpan, bash без bin.
 

Absinthe

жожо
Надеюсь не надо объяснять, что любой язык прекрасно работает без всяких библиотек.
Каким образом контейнер вектор(часть C++) будет работать без STL?

пирание что STL часть языка это демагогия.
В данном случае это неоспоримый факт, описанный в самой спецификации.
Демагогию разводишь ты, подменяя понятие "язык X" на "синтаксис языка X".
 

whirlwind

TDD infected, paranoid
Absinthe иди почитай историю в википедии хотяб. Тогда узнаешь, что было время, когда STL не было частью языка C++. Прикинь, я в то время уже даже шпрехал на этом языке. Странно, как же в то время все работало, а? В общем, тему продолжать смысла не вижу, ну по крайней мере пока хотя бы строчки кода от тебя не увижу, что подтвердит твою позицию практика, а не демагога.
 

Absinthe

жожо
whirlwind какая нахрен разница, что было? В PHP классов не было, значит их и сейчас нет и они не часть языка?

В общем, тему продолжать смысла не вижу, ну по крайней мере пока хотя бы строчки кода от тебя не увижу, что подтвердит твою позицию практика, а не демагога.
http://lurkmore.ru/Сперва_добейся ?
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
Каким образом контейнер вектор(часть C++) будет работать без STL?

В данном случае это неоспоримый факт, описанный в самой спецификации.
Демагогию разводишь ты, подменяя понятие "язык X" на "синтаксис языка X".
о ужОс, как-же работает MFC-ный CArray без STL, такого быть не может. whirlwind, абсолютно прав C++, прекрасно может существовать без boost, stl, mfc и прочего. Были времена, когда реализовавали контейнеры list, avl-tree и т.д. без шаблонов, что приводило к опредленным неудобствам.

Но к сожалению много сейчас встречаются людей, для которых наступит колапс если задача будет поставлена написать на С++ под микропроцессор без STL и прочих библиотек, многие к сожалению даж не понимаю что такое union...
 

fixxxer

К.О.
Партнер клуба
На уровне: php без pear
Неправильная аналогия. Скорее - php без всех стандартных extensions, включая ext/standard/*.
Если считать, что php - это только zend engine - тогда да, согласен.

многие к сожалению даж не понимаю что такое union
Дык я и говорю начинать надо с С
 

AnToXa

prodigy-одаренный ребенок
ну вот, увидел интересный заголовок, а внутри уже войнушка :D

книжку читай K&R, на C++ забей пока, оно само получится в процессе.
 

AnToXa

prodigy-одаренный ребенок
Что касается функциональщины и ООП - есть мнение, что легкие процессы ерланга - это как раз полноценные объекты в изначальном смысле
хорошая, кстати, мысль.
 

phprus

Moderator
Команда форума
fixxxer
Я немного наврал.
weak_ptr - это слабая ссылка на shared_ptr. Контролировать живость объекта по обычному указателю в С++ не получится. А для shared_ptr есть такое дополнение, как weak_ptr.


phprus если обратите внимание на мой код, то там указатели некопируемые. Если вы копируете указатели, то нахрена вам вообще врапперы над указателями? Копируйте указатели напрямую - проблемы те же самые, только гемора меньше.
Что, что? Разница в семантике между всеми этими видами умных указателей есть. И если использовать их не по назначению, то и получаем гемор. Если использовать по назначению, то сплошные удобства. И даже на производительность реальных приложений практически не влияет.

STL - это библиотека. Оно так и переводится - Standard Templates Library. Надеюсь не надо объяснять, что любой язык прекрасно работает без всяких библиотек. Упирание что STL часть языка это демагогия. На уровне: php без pear не язык, perl без cpan, bash без bin.
Посыл верный, вывод нет.
Язык С++ - это стандартизированный язык. И согласно стандарту STL является частью языка С++.
То, что можно писать программы используя подмножество языка, не означает, что язык не содержит всего остального.

А как с этим связана история вообще не понятно. Да, раньше STL не было, а теперь она есть и является частью языка в соответствии со стандартом.
 

whirlwind

TDD infected, paranoid
Да мне вообще-то плевать кто что думает и как считает. Я отвечал на реплику fixxxer про то, что C++ сложный язык. Я учился по первому изданию этой книги, которая вышла в 1998г. По очевидным причинам в ней не было ни слова про STL, зато было много информации про модель памяти, ссылки, указатели, классы, шаблоны и все действительно важное, что в дальнейшем позволяет использовать или не использовать любую библиотеку независимо от того, является ли она частью языка изначально или последние 20 лет.
 

fixxxer

К.О.
Партнер клуба
whirlwind, угу, я примерно в то же время все это изучал, и считал, что более-менее все знаю. А сейчас открою какой-нибудь код, где буст на бусте, и нихрена не понимаю вообще :D

Ок, пусть это все не считается частью С++ - но работать-то с этим придется по факту.
 

whirlwind

TDD infected, paranoid
fixxxer Все что я знаю из набора [^L]AMP, кроме пожалуй апача второго, процедурной лапшой написано. Что ты такое ковыряешь, игры что ли?
 
Сверху