И что писать в result , если произошла ошибка? Опять какое-нибудь optional. И чем, тогда, это лучше простого expected? С ним ты точно так же можешь сделать, если ошибка или её часть - enum.
Да, я там не прав, но ты ищешь, где придраться, когда как тот шаблон нифига не explicit. И ещё, если он был бы explicit , он не был бы отброшен после точного соответствия в пользу приведения типов аргументов, была бы ошибка компиляции. Так что это ещё одна ложь, галлюцинация ИИ: Он отбрасывает правильный конструктор (It first, End last)
Это называется послал. Нахрен здесь ссылка на 164 репозитория. Иди в анус и возвращайся оттуда с демо-кодом. А так, это было похоже на попытку натравить ИИ на проект и написать статью на основе его галлюцинации с целью обосрать C++.
Дополню. Вообще, если статья была бы правдой, то неверный результат возник бы раньше, а не после добавления "/com/swtSyst". Возник бы вопрос, почему не приходят события "fan/tach".
Расходимся! Это очередной высер, чтобы поднасрать С++.
std::ranges::mismatch(a, b) намекает на C++20 или новее, а в нём есть конструктор (5)
template< class It, class End >
constexpr basic_string_view( It first, End last );
И простой тест показывает правильный результат "/"
#include <iostream>
#include <ranges>
#include <string_view>
constexpr std::string_view commonPrefixOfTwo(std::string_view a,
std::string_view b) {
auto [first, last] = std::ranges::mismatch(a, b);
return {a.begin(), first}; // Запомните эту строчку!
}
int main() {
constexpr auto common =
commonPrefixOfTwo("/xyz/openbmc_project/sensors/", "/com/swtSyst");
std::cout << common << "\n";
}
Да и в С++17 без ranges это бы не скомпилировалось. Потому что никаких неявных преобразований const char* в size_t не происходит!
error: no matching constructor for initialization of 'std::string_view' (aka 'basic_string_view<char>')
note: candidate constructor not viable: no known conversion from 'const char *const' to 'size_type' (aka 'unsigned long') for 2nd argument; dereference the argument with *
Это очень упрощённый пример. В общем случае нужно будет сравнивать границы памяти, указатели на больше/меньше. А здесь уже засада. Отношения указателей, не указывающих в один storage - это UB.
Может быть, поэтому контракты не зашли, надо будет убрать этот UB.
И что писать в
result, если произошла ошибка? Опять какое-нибудьoptional. И чем, тогда, это лучше простогоexpected? С ним ты точно так же можешь сделать, если ошибка или её часть -enum.Да, я там не прав, но ты ищешь, где придраться, когда как тот шаблон нифига не
explicit. И ещё, если он был быexplicit, он не был бы отброшен после точного соответствия в пользу приведения типов аргументов, была бы ошибка компиляции. Так что это ещё одна ложь, галлюцинация ИИ: Он отбрасывает правильный конструктор(It first, End last)Это называется послал. Нахрен здесь ссылка на 164 репозитория. Иди в анус и возвращайся оттуда с демо-кодом. А так, это было похоже на попытку натравить ИИ на проект и написать статью на основе его галлюцинации с целью обосрать C++.
Когда у оппонента нет аргументов, он переходит на личности. Не говори, что мне читать, а я не скажу, куда тебе пойти.
У тебя логическая ошибка уже на первом шаге, а ты докопался до второго. Так что давай минимальный пример с #include и main(), а не кусочки кода.
Не воспроизводится. Не можешь угомониться? Ты бы хоть проверил текст ИИ, которого ты принуждаешь согласиться с тобой.
a.begin()- всё ещё'std::basic_string_view::const_iterator' {aka 'const char*'}.Так же
first- этоconst char*.Хватит врать! Нет там
explicit. Ты хоть знаешь для чего он? Он не имеет смысла для конструктора с двумя параметрами.Какой-то бред.
В блоке кода можно указать язык
Дополню. Вообще, если статья была бы правдой, то неверный результат возник бы раньше, а не после добавления "/com/swtSyst". Возник бы вопрос, почему не приходят события "fan/tach".
Расходимся! Это очередной высер, чтобы поднасрать С++.
std::ranges::mismatch(a, b)намекает на C++20 или новее, а в нём есть конструктор (5)И простой тест показывает правильный результат "/"
Да и в С++17 без ranges это бы не скомпилировалось. Потому что никаких неявных преобразований
const char*вsize_tне происходит!Код
AnyProcessor::Modelстановится немного короче если использовать часто незаслуженно забываемое множественное наследование:@matweu Почему не указываешь язык в блоках кода?
Вообще это ни сколько не обычно. Автор упускает из виду оптимизацию коротких строк.
Да почини уже код. Из-за своих многоточий не видишь ошибок.
Всё ещё инвалидный код после правки.
Многоточия только засоряют код. Это так важно показать, что что-то ещё там может быть?
против:
Автор - писатель, а не читатель. Вычитка где? В чём разница этих одинаковых инвалидных блоков? И в чём состоит сакральный смысл многоточий?
Самсунг - унылое г. Купил их sd с 10-летней гарантией, так она сдохла через 2 года.
Это что за язык программирования такой?
Вычитывать пост следует до публикации, чтобы абзацы не повторялись.
Это очень упрощённый пример. В общем случае нужно будет сравнивать границы памяти, указатели на больше/меньше. А здесь уже засада. Отношения указателей, не указывающих в один storage - это UB.
Может быть, поэтому контракты не зашли, надо будет убрать этот UB.
Странный заголовок с числом ни разу не упомянутым в статье.
Так где часы то?
Убрали цифровую версию!
Статья про C внезапно перетекала в про C++.