- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
"Сайт о прыщах, 9858 руб./месяц, 1000+ чел/сутки":
https://telderi.ru/ru/viewsite/1356387
"Продам сайт о прыщах, выписано 156 статей, можно собрать СЯ и полностью охватить тему, сайт любит и Гугл и Яндекс, трафик идет одинаково.
Монетизация под эту нишу может быть офферная - с неё я думаю доходы будут выше, чем 10 000 руб. в месяц, я к сожалению опыта работы с офферами не имею, в принципе как и времени на этот проект.
Просадка трафика на графике связана с фильтром от гугла: ранее сайт стоял с неоформленными статьями (без картинок, с битыми ссылками на видео), все переоформили и фильтр был снят. Я тут этот сайт
и купил, пока он был под фильтром.
Ссылки не закупались, но они и не нужны - гугл хорошо ранжирует сайт. Можно сделать перелинковку для увеличения позиций и трафика".
Он забанил моеу учетку (
Могу дать пароль от adrnin'a (123), взамен обещай быть пай-мальчиком и хорошо себя вести, ок?
Ща кто-нибудь купит - а там действительно прыщи.
А что можно было бы добавить в язык, чтобы это решить? Как-нибудь так?:
Тогда sizeof(Cormorant) будет константой времени связывания. Интересно, к чему это приведет...
Понятно, что если всегда выделять объект в куче, то можно размер определять и динамически. Но это не всегда уместно: может, у меня библиотека комплексных матриц, которые я захочу хранить хоть в массиве, хоть полями - на каждый экземпляр выделение памяти дергать, что ли?
экземпляра - это часть публичного интерфейса. И это так и должно быть.
По идее достаточно добавить в него новый тип релока - "прибавь сюда значение символа".
Интерфейсик в хедере, унаследованная от него реализация с полями и прочими кишками в цпп. Почти как в жабке.
Ну на стеке такой объект уже не создашь, да. Но для высокоуровневых классов в общем-то и похуй, особенно если shared_from_this нужен.
В жабе вообще конструкторы considered harmful. В крестах от них хоть практическая польза есть.
Item 1: Consider static factory methods instead of constructors
Там много интересного написано.
Рантайм силами миллионов человеко-лет более-менее сносный запилили. Енумы более-менее нормальные сделали, жаводок был хорошим введением, ну и систему аннотаций они развили.
А в языке ещё много эпичного: кривая вариантность массивов (позорный ArrayStoreException) из-за отсутствия женериков в первых версиях, впоследствии слабенькие женерики, отсутствие тайпдефов, жуткий бойлерплейт с equals/hashCode, хоть какая-то модульная система лет через двадцать лет зарождаться начала, etc, можно долго список продолжать.
В четвёрку же даже memory model ещё не завезли?
Ссылка (обычно) больше инта, поэтому толку передавать ссылку вместо значения никакого. Разве что где-нибудь в шаблонах, чтобы не выпендриваться с оптимальной передачей аргументов
> const int& foo = 0;
Практического смысла в этом, кмк, нет. Я такого ни разу не писал.
> const int& foo
Я бы такого точно не написал, можно просто
const int foo = bar ? 1 : 42;
Обмазывание макросами оставим читателю в качестве испражнения упражнения.
Вот приватные методы в интерфейс совать — ну совсем не камильфо (понятно, почему так, но причина уж больно уныла).
Поэтому я зачастую вместо приватных методов использую статические функции в .cpp файле и передаю в них необходимый стейт явно.
static void coco(const std::string& name) { std::cout << name; }
клиенту нужно выделить место для укозателя на функцию, верно?
щито? я говорю о > типа
Нет, так не сработает, name-то (предположительно) приватный.
Гугли NVI idiom
> прочитал что vtbl храница в объекте
Где прочитал? Враньё это. В объекте указатель на неё хранится.
Потому что клиент по индексу из таблицы функции вызывает, ему надо знать порядок и кол-во виртуальных функций в классе.
Нет конечно
Техническая причина есть, но от этого не легче.
В неймспейсах (включая корневой) компилятор работает в один проход, поэтому всё нужно декларировать до первого вызова.
А вот содержимое классов и структур компилятор обрабатывает в два прохода, поэтому реализации методов могут вызывать другие, ещё не определённые (и даже не объявленные!) методы. Когда компилятор видит реализации метода, он смотрит на всю декларацию класса (и только туда), чтобы узнать контекст.
Из-за этого декларация класса/структуры должна содержать все методы класса, включая приватные.
Айкы-ы-ы-ы-ы -_-
Ну ебать, это же ООП. А где по-твоему должен храниться указатель на метод?
Ебать, какое открытие...
>прочитал что vtbl храница в объекте
{facepalm}
И садись на огурец,
Ылитный гвидопыховец.
http://perevod-tekst-pesni.ru/sektor-gaza/tekst-pesni_kolhoznii-pank.htm
Of the collective farm youth pankoval alone I :
I wore leather pants and was dirty as a pig
My papanka to combine three rules did the day
A mamanka out there on the farm, dergaet boobs all day.
Давно я так не уссыкался ...
Правда, это нужно в основном в слотах. Было бы хорошо написать что-то типа:
Да пошло оно в жопу. Я лучше PCH включу, чем буду писать эти затычки-вместо-инклудов.
В сишке 99 тоже есть inline, проверь.
Нет https://www.youtube.com/watch?v=GldFtXZkgYo
// хоть там речь о крестах, в сишке такой же подход.
inline гарантирует, что функция будет только одна, если все определения одинаковые https://en.cppreference.com/w/cpp/language/inline
Но на вашем любимом вендовозе это не так, если линкуешься с разделяемой библиотекой (dll) в которой есть такая функция.