Pull to refresh
17
0

User

Send message
богомерского std::string, ещё более богомерского std::wstring

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

Это вам кто-нибудь сказал или вы сами решили?
ощущение, будто львиный пласт навыков становится ненужным
Ну так это и есть причина для:
в комментах довольно часто можно встретить мнение, что плюсы становятся хуже, комитет делает непонятно что непонятно зачем, и вообще верните мне мой 2007-й

Раньше человек мог с гордым видом наколдовать что-то типа
for (std::map<int, std::string>::const_iterator it = Map.begin(); ...
и чувствовать себя чуть ли не небожителем.
А с этими их новшествами и упрощениями шокировать джуниоров и случайных прохожих становится всё сложнее и сложнее.
Шаблоны вида return x == y любой адекватный компилятор встроит и драгоценное место они занимать не будут.

А конкретно в вашем примере (const T& x, const T& y) комбинаторного взрыва не будет. Думаю, очевидно, почему.

"Да не пригорает у меня!!!111" ©

  • У вас 50 разных типов?
  • Если эти функции написать ручками, их будет не 50?
Нихрена ты не разработчик
сойдите с этой планеты
можно просто уйти в монастырь
если не практикуешься, то забываешь
разработчикам очень обидно
отращивайте себе скилл с харизмой заново
не тащите ссылки на былые успехи

В тексте чувствуется знатная попаболь.
Дайте погадаю. У «настоящего разработчика» случился факап, пришел «какой-то менеджер» (совсем не настоящий же!!11), показал мастер-класс и теперь перед коллегами неудобно?

Разработчик — это, прежде всего, склад ума и понимание CS в целом, а не уверенное жонглирование очередным JS-фреймворком, имя которым легион.

Код — не велосипед, да (хотя у кого как). Знания — велосипед.
Если человек знает фундаментальные принципы разработки, структур данных, оценки сложности алгоритмов и т.п. — это уже не пропьёшь, он освоит любой язык за два дня, даже если писал последний раз в 80-х.
[[nodiscard]] теперь можно навешивать на конструкторы и целые классы

Не совсем понятно, каким боком тут «целые классы»:

«The attribute-token nodiscard may be applied to the declarator-id in a function declaration or to the declaration of a class or enumeration» (n4713.pdf, C++17).

Да и в пейпере речь только о конструкторах.
людьми, которые реально думают о производительности

«У меня есть молоток C++ и теперь всё вокруг гвозди нуждается в оптимизации».

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

Закончив в пятницу и убедившись, что они ускорили код в 10 (допустим) раз они идут на хабр делиться мудростью и предвкушать премию, а тем временем выясняется, что:

— 10 раз — это 1 мкс вместо 10 мкс;

— этот идеально оптимизированный код вызывается исключительно в контексте чтения из / записи в БД, выполняющемся на 3 порядка дольше, и теперь работа с БД занимает не 5 с, а 5 с;

— либо этот код вызывается исключительно когда пользователь заполняет форму, и заполнение формы теперь занимает не от 2 минут до 3 часов, а от 2 минут до 3 часов;

— либо этот код вызывается 1-2 раза за всё время работы, и теперь программа майнит монету не неделю, а неделю;

— либо этот код в 99 случаях из ста работает с джонами смитами, элтонами джонами и риками санчезами, и только в одном случае с даздрапермой череззаборногузадерищенской, так что SSO превращает все ручные оптимизации в тыкву;

— либо этот класс всегда живет меньше, чем его агрументы, поэтому можно было ничего не копировать и хранить указатели / ссылки;

— и т.д. и т.п.

А менеджеру такого гуру оптимизации теперь надо как-то объяснить клиенту, на что потрачена неделя и за что тот заплатил условный килобакс денег.
Ну и решить, что дальше делать с гурой.

«Premature optimization is the root of all evil». ©
Замеряйте.
вы хотите сделать копию данных и передать её в класс, это нужно делать явно на стороне вызывающего

Я? Нет, лично я не хочу делать копию.
Если class person хочет у себя внутри иметь копию строк — это его право и, в общем случае, детали реализации.
Сваливая бремя конструирования этих строк на клиента, вы потенциально загрязняете ему код:
std::string_view First = ..., Last = ...;
person Person{std::string{First}, std::string{Last}};

— Красота же, да?

Принимайте string_view, он неявно и практически бесплатно конструируется из всего, и копируйте его потом себе как хотите (если надо).
Единственный «недостаток» — да, нельзя переместить rvalue-строку внутрь объекта (и этим сэкономить аж одно копирование). Если у вас есть сомнения в эффективности — сначала профилируйте, и только если вы действительно можете что-то выиграть на этих временных объектах — оптимизируйте.
Такой код позволяет покрыть все возможные варианты использования класса
Правда?
reader.Peek(); //Вот так нужно заглянуть в файл, чтобы получить его кодировку.
fileEncoding = reader.CurrentEncoding;
fileContents = reader.ReadToEnd();

Я не настоящий сварщик, но, сдаётся мне, вы комментарием пытаетесь прикрыть говнокод.

Там же сразу после этого всё содержимое файла читается, автодетект на нем сработает. Берите CurrentEncoding после ReadToEnd() и никаких Peek не надо.

Если это действительно так, то вы сделали сильно хуже.
Отсутствие комментария может побудить кого-нибудь воскликнуть «WTF?», разобраться и исправить, а с комментарием вида «так надо» эта копипаста со StackOwerflow будет цвести еще очень долго, «накопляя мелкие детали и постепенно захламляя некогда чистый код».
И тогда правительство скорее всего пойдет на попятный
Блажен, кто верует.
Правительство может пойти на попятный только в одном случае — если оно хочет законно остаться на следующий срок, а текущий курс не пользуется популярностью у избирателей (это, однако, подразумевает наличие честных выборов, сменяемости власти и других концепций, напрямую не относящихся к тематике этого ресурса).
I think both Mozilla and Google should intervene into this situation because it can create a dangerous precedent, nullifying all the efforts of encofcing HTTPS.
Это какой-то эталон инфантильности — «нас тут прослушивают, пусть дядя за океаном им как-то помешает!».
Завтра вам очередная квазигосударственная IT-контора сделает национальный браузер с вшитым сертификатом и придет SMS с указанием им пользоваться. Куда вы будете жаловаться — в спортлото?

Проблемы жителей Казахстана могут решить только жители Казахстана.
Синтаксис языка Си подразумевает полный и явный контроль программистом всего в программе

иллюзию полного и явного контроля.
Не пренебрегайте … таким языком, как С/С++
языком С/С++

Совет, безусловно, справедливый, но программисту и преподавателю в 35 пора бы уже различать.
_min
Не делайте так сами и не учите других: the identifiers that begin with an underscore are reserved in the global namespace.

байткод
Вы точно про C++ пишете?
О, всегда приятно встретить эксперта.
Вы хотите сказать, что для комплятора в compile-time цикл феерически сложнее, чем рекурсия, поэтому время компиляции будет в разы больше, я правильно понимаю?
в С++17 по идее можно использовать рекурсивную лямбда constexpr функцию, но не уверен, что это приведет хоть к каким-то упрощениям, а также не усложнит ассемблерный порядок.

Зачем лямбды, у вас и так уже как-то всё очень сложно — рекурсия, дополнительные аргументы…
Даже на C++14 уже вполне можно так:

constexpr uint32_t bit_num_from_value_cpp14_v2(uint32_t val)
{
    uint32_t i = 0;
    while (1 << i != val) ++i;
    return i;
}
При определенных масштабах и грамотной организации (и автоматизации) процесса и для одного работы нет. В таких случаях бывает проще / выгоднее / надёжнее аутсорсить.
А риски каждый бизнес, естественно, оценивает сам, как и то, что ему выгоднее — переплачивать понемногу, но постоянно, или экономить, но если не повезёт — лечь надолго, если не насовсем.

Information

Rating
Does not participate
Registered
Activity