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)

Ответ на: комментарий от mix_mix

Тогда вектор (умных) указателей. В чём проблема?

invy ★★★★★
()

Ещё вброшу

template<class T, class U>
auto operator+(const Matrix<T>& a, const Matrix<U>& b) −> Matrix<decltype(T{}+U{})>;
(+) :: Matrix a -> Matrix b -> Matrix c

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

А вообще типичный ответ - большего я и не ожидал.

На вопрос, который ты задал, лучший ответ - 42. Потому что вопрос такой.

tailgunner ★★★★★
()
void f(int n)
{
    int v1[n]; // error: array size not a constant expression
    vector<int> v2(n); // OK: vector with n int elements
}

Штоа? Даже в сишке такую хренотень осилили. Нафиг так жить.
Отныне здесь будет мой бложик, где я буду делиться впечатлениями от прочтения Страусиной Книги ©®™

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

шо такое /якорный/ эрланг?

синоним тормознутый. «Боцман че так корабль медленно идет? Вы отдали приказ полный ход, но забыли отдать приказ поднять якорь, сэр».

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

Судя по всему тебе всё ещё нечего сказать.

На что? На «поменять без копирования»? Я и говорю убогое решение на убогом языке. А по поводу твоих рекомендаций со списками - тебе подучить матчасть надо по вопросу RandomAccessIterators и прочей херни.

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

На вопрос, который ты задал, лучший ответ - 42. Потому что вопрос такой.

Там была конкретная проблема. Зачем он хочет упорядочивать линейно 25мерное пространство это к нему - я его делать это не просил.

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

как можно поменять два элемента местами без копирования.

Во-первых, swap и ADL

using std::swap;
swap(x, y);

У тебя есть возможность определить для своего типа функцию swap, которая обменяет значения без копирования.

А во-вторых, не копирование, а перемещение.

Begemoth ★★★★★
()

И ниасилил, да.

нужно было вначале указать это

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

На что? На «поменять без копирования»? Я и говорю убогое решение на убогом языке.

А как в не убогом языке?

RandomAccessIterators

Чем тебя list::sort не устраивает?

invy ★★★★★
()

Г-пди, как же можно на этом писать, особенно после знания божественных лиспов, хаскелей и прочих матанских агд

Добро пожаловать в реальный мир.

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

С оговоркой C99 - справедливо. gcc с версии 4.5 умеет.

invy ★★★★★
()

А ЧСВ тешить что есть возможность управления памятью?

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

Штоа?

http://en.wikipedia.org/wiki/C++14#Runtime-sized_one_dimensional_arrays

gcc и clang уже умеют, как и дедукцию типа результата (ты на это тоже вроде жаловался)

Даже в сишке такую хренотень осилили. Нафиг так жить

в сишке оно опционально и это выписано в стандарте

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

ноль копирования:

#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

class A {
public:
 int a;
 A() { a = rand() % 100; }
 A(const A& other) {
  cout << "copied\n";
  a = other.a;
 }
 A(A&& other) : a(other.a) {
  other.a = 0;
 }
 A& operator=(A&& other) {
  a = other.a;
  other.a = 0;
  return *this;
 }
};

int main() {
 vector<A> v(10);
 sort(v.begin(), v.end(), [](const A& l, const A& r){ return l.a > r.a; });
 return 0;
}

invy ★★★★★
()

Г-пди, как же можно на этом писать, особенно после знания божественных лиспов, хаскелей и прочих матанских агд (sic!)

не пиши, чо

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

наибыстрейший веб-сервер, из напиcанных на хацкеле

починил, не благодари... И да. Как будто это все объясняет :) В выдаче гугла оно где?

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

А как в не убогом языке?

А в неубогом язычке таких проблем нет. Его для для этого делали - чтобы херней не страдать.

Чем тебя list::sort не устраивает?

Суть моего поста сводилась не к «в принципе нельзя» (и чего это все разговоры с плюсовиками сводятся фигурально к фигуральной «используй ассемблерную вставку»). А к возражению насчет «освой подмножество». Решения в лоб на плюсах в области которую я озвучил - манипуляции огромными структурами - умудряются тормозить похлеще тормознутого эрланга. А чтобы написать это действительно эффективно - придется становиться экспертом в области этого шизонутого гемороя - то есть борьба не с проблемой, а с решением этой проблемы. Не спасибо - я лучше на plain C это перепишу все руками, чем воевать с потрохами STL.

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

ноль копирования:

Меня копирование беспокоит не в смысле шашечек, а в смысле спаленого CO2 - скорости работы.

И да ++11 нету - в смысле пока нельзя.

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

Бгг. Если в самом деле «лучше», то это одноразовая задачка, не заслуживающая обсуждения. Типа ассемблерной вставки для оптимизации.

это и есть «ассемблерная вставка» в эрланг. Меня просто убило что простое решение в лоб было тормознутее эрланга в 6 раз. То есть банально трансформация длинного списка таплов где в алгоритме кучка сортов и партишенов - оборачивается таким гемором, что я понял почему валкину проще слейв процессы на окамле запускать.

r ★★★★★
()

почему нельзя всё было сделать по-человечески, как в нормальных языках?

Например как?

forCe
()
Ответ на: комментарий от r

это и есть «ассемблерная вставка» в эрланг.

Естественно, что для мелких одноразовых задач у Си++ преимуществ нет (или мало). Но во всякой большой Си-программе реализован кривой и убогий компилятор Си++.

tailgunner ★★★★★
()

Ненавижу страуса, ненавижу плюсы

Мышки плакали, кололись, но продолжали есть кактус?

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

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

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

Скажи этим людям, что рабство давно отменили.

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

Как и в первом сравнении, информации приведено ровно столько, сколько и в плюснутом варианте. Что касается замечания, то зависимость c от a и b компилятор сам выведет из реализации.

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

информации приведено ровно столько, сколько и в плюснутом варианте.

Ну как же, если я в плюсовом варианте получаю информацию о типе, которым будет параметризирован результат, а в Haskell - нет?

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

а в Haskell - нет?

Компилятор сам поймёт, он не глупый, в отличии от. Для человека можно указать в комментариях.

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

man alloca

А вообще это плохой дизайн в большинстве случаев. Хотя для следующего С++ есть предложение добавить std::dynarray

forCe
()
Ответ на: комментарий от mix_mix

Плевать на компилятор, как мне при чтении кода эту зависимость понять?

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