LINUX.ORG.RU

Какое же говнище этот ваш С++

 


11

7

Решил намедни углубить свои знания по плюсам, чувствуя, что скоро нехило так потребуются по работе. Теперь сижу, обмазываюсь тут всякими трупами страусов, Скоттом Майерсом и другими. Г-пди, как же можно на этом писать, особенно после знания божественных лиспов, хаскелей и прочих матанских агд (sic!). Это какая-то пытка, честное слово, мне натурально мерзко и противно читать как люди пытаются вырезать гланды через задний проход да ещё и хвалятся этим, поглядите, мол, как это круто. Такое ощущение, будто плюсисты все поголовно латентные мазохисты.

template <typename T>
class Rational
{
    public:
    ...
    friend const Rational operator*(const Rational& lhs, const Rational& rhs)
    {
        return Rational(lhs.numerator() * rhs.numerator(), // same impl
            lhs.denominator() * rhs.denominator()); // as in Item 24
    }
}

An interesting observation about this technique is that the use of friendship has nothing to do with a need to access non-public parts of the class. In order to make type conversions possible on all arguments, we need a non-member function (Item 24 still applies); and in order to have the proper function automatically instantiated, we need to declare the function inside the class. The only way to declare a non-member function inside a class is to make it a friend. So that's what we do. Unconventional? Yes. Effective? Without a doubt.

Нафиг так жить, почему нельзя всё было сделать по-человечески, как в нормальных языках? Ненавижу страуса, ненавижу плюсы, ненавижу тех идиотов, которые упорно продолжают куда ни попадя совать этот мёртвородженный язычок. И ниасилил, да.

Перемещено mono из talks

★★★★★

Последнее исправление: mono (всего исправлений: 1)
Ответ на: комментарий от Boy_from_Jungle

неубедительно звучит, 100% гарантии нет что оно применит NRVO или RVO

Ну так я и сказал, что в общем (статистически) случае копии не будет. В частных случаях компилятор может решить не делать оптимизацию, да.

aist1 ★★★
()
Ответ на: комментарий от vitalif

Всё бы хорошо с вашим Object Pascal, вот только за begin..end руки оторвать создателю хочется

Ещё есть те кому форматирование отступами не нравится. А в лиспах скобочки плохие. begin..end упрощают создание парсера, как я понимаю.

tp_for_my_bunghole
()
Ответ на: комментарий от warezpro

основная причина неприязни C++ - на нем ничего нельзя написать в одиночку или даже небольшим коллективом. С++ это язык для крупных проектов

Это ты неправильно решил.
С++, ввиду своих убогих выразительных средств, сваленных в кучу для имитации ООП (и даже близко к нему не подойдя), подходит разве что для перделок уровня download manager, где без особого риска можно написать пятóк-другой классов двухуровневой иерархии и развивать проект практически любым программистом.
Как только модулей становится больше двух, а алгоритмы давно уже перевалили уровень «обойти дерево», становится просто страшно за этот шмот сипиписной пое**ни, где никто и никогда не сможет пообещать безотказную работу.

Простой пример: Crysis-3 (релиз!). Вылетает с ошибкой «невозможно выделить память», хотя, как вы догадались, памяти - хоть ж-ой ешь. Причина? Тот самый хвалёный «ручной контроль», где тщеславный долбо*б, выучив пару паттернов, совершенно не думает (или боится думать) о сложности системы в целом. Ковыряясь как муравей со своей иголкой, он не понимает, что весь муравейник - крайне хрупкая вещь и невозможно думать обо всех тех ТЫСЯЧАХ мест, где ты возишься с указателями. И это речь о тех, кто вообще способен применить С++ в полный рост! А сколько недомерков пришли в него после похапэ/бейсика - даже не думай смотреть в их код.
С++ - это мрак, про который забудут как про страшный сон. Будущее - с C# или D.

matumba ★★★★★
()
Ответ на: комментарий от matumba

тщеславный долбо*б, выучив пару паттернов

он не понимает

весь муравейник - крайне хрупкая вещь

невозможно думать обо всех тех ТЫСЯЧАХ мест, где ты возишься с указателями

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

ckotinko ☆☆☆
()
Ответ на: комментарий от matumba

Не факт что памяти дофига. Если приложение не 64 bit оно больше 2-3 гиг использовать не сможет. Хотел бы я посмотреть на Кризис написанный на C# )

FreeLiver ★★★
()
Ответ на: комментарий от matumba

Простой пример: Crysis-3 (релиз!). Вылетает с ошибкой «невозможно выделить память», хотя, как вы догадались, памяти - хоть ж-ой ешь. Причина? Тот самый хвалёный «ручной контроль»

вангуешь?

asaw ★★★★★
()
Ответ на: комментарий от Boy_from_Jungle

неубедительно звучит, 100% гарантии нет что оно применит NRVO или RVO

Здесь имеет место RVO, эта оптимизация работает в 100% случаев при использовании компиляторов из этого тысячелетия.

annulen ★★★★★
()
Ответ на: комментарий от aist1

В частных случаях компилятор может решить не делать оптимизацию, да.

Компилятор не может ничего «решить», он либо умеет делать RVO/NRVO, либо не умеет. RVO применимо в любом случае, NRVO - если все возможные пути выхода из функции возвращают один объект и нет пути выхода через исключение.

http://msdn.microsoft.com/en-us/library/ms364057(v=vs.80).aspx

annulen ★★★★★
()
Ответ на: комментарий от annulen

Здесь имеет место RVO, эта оптимизация работает в 100% случаев при использовании компиляторов из этого тысячелетия.

провереть это на студии, попробуй debug/release варианты, поробуй также некуевое ветвление сделать, а потом расскажешь

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от alexeiz

Ты просто не знаешь, как работает RVO.

сразу видно что ты знаешь.

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от Boy_from_Jungle

поробуй также некуевое ветвление сделать

Ты с NRVO не путаешь? RVO к ветвлению не имеет отношения.

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.