Size: a a a

2020 October 25

АР

Андрей Руссков... in pro.cxx
Yurtur, the Prophet
Стрлен возвращает unsigned, что приводит второе число тоже к unsigned идёт оверфлоу, и число становится большим
не переупрощай. unsigned будет 32-битным на большинстве платформ, а size_t - 64-х
источник

AF

Aidar Fattakhov in pro.cxx
первое кстати вроде unspecified до си++20(как и твой код сейчас)
источник

Y

Yurtur, the Prophet in pro.cxx
Да, я unsigned не как тип, а как unsigned T
источник

АР

Андрей Руссков... in pro.cxx
Zhanarys Sairanbekov
Теперь понял, спасибо. Но как я могу сравнить эти два значения?
привести результат size_t к знаковому типу. Например к intmax_t
источник

ZS

Zhanarys Sairanbekov in pro.cxx
Спасибо парни, вроде так правильно:
((int)strlen(str) > max)
источник

AF

Aidar Fattakhov in pro.cxx
правильно конечно 0 > max || strlen(str) > max
источник

m

magras in pro.cxx
Aidar Fattakhov
первое кстати вроде unspecified до си++20(как и твой код сейчас)
А в 20ом изменили правила каста unsigned -> signed?
источник

AF

Aidar Fattakhov in pro.cxx
magras
А в 20ом изменили правила каста unsigned -> signed?
мне казалось там ввели 2-complement
источник

AM

Alexander Malkov in pro.cxx
коллеги, кто-нибудь использовал S3 Yandex? что лучше использовать для соединения с C++? Подойдет ли библиотека AWS S3?
источник

m

magras in pro.cxx
Aidar Fattakhov
мне казалось там ввели 2-complement
Да, похоже на правду. Вот кусок из p0907R1:

> Change Conversion from signed to unsigned is always well-defined: the result is the unique value of the destination type that is congruent to the source integer modulo 2N.

Вот текст текущего стандарта: https://eel.is/c++draft/conv.integral
источник

AF

Aidar Fattakhov in pro.cxx
Alexander Malkov
коллеги, кто-нибудь использовал S3 Yandex? что лучше использовать для соединения с C++? Подойдет ли библиотека AWS S3?
там есть интерфейс s3 (не знаю насчет полноты)
источник

AF

Aidar Fattakhov in pro.cxx
ну т.е файлики я загружал через s3cmd
источник
2020 October 26

K

Kirill in pro.cxx
template <typename T, typename F>
bool foo (const T & x, const F & a, const F & b)
{
   return a (x) == b (x);
}

template <typename T>
bool bar (const T & x, const T & a, const T & b)
{
   return foo (
       x,
       [&] (const T & arg) {return a == arg;},
       [&] (const T & arg) {return b == arg;});
}

int main ()
{
   bar (0, 0, 0);
}


Почему дедукция ломается? Выдаёт вот такую ошибку
no matching function for call to ‘foo(const int&, bar(const T&, const T&, const T&) [with T = int]::<lambda(const int&)>, bar(const T&, const T&, const T&) [with T = int]::<lambda(const int&)>)’

deduced conflicting types for parameter ‘const F’ (‘bar(const T&, const T&, const T&) [with T = int]::<lambda(const int&)>’ and ‘bar(const T&, const T&, const T&) [with T = int]::<lambda(const int&)>’)


Помогает добавить третий параметр в foo, например вот так template <typename T, typename F1, typename F2>

Но должно ведь работать и с одним, разве нет???
источник

K

Kirill in pro.cxx
Сигнатуры ведь идентичны
источник

SS

Sergey Sobolev in pro.cxx
Kirill
Сигнатуры ведь идентичны
попробую предположить, что лямбда разворачивается в класс с перегруженным operator(). Следоватльно, их типы будут разные вне зависимости от сигнаруты
источник

SS

Sergey Sobolev in pro.cxx
по этой причине собсвенно, третий параметр шаблонный и помогает
источник

K

Kirill in pro.cxx
А ещё работает, если обернуть лямбды в std::function
Вот так например
std::function<bool(int)> f_a = [&] (const T & arg) {return a == arg;};
std::function<bool(int)> f_b = [&] (const T & arg) {return b == arg;};

return foo (x, f_a, f_b);
источник

IL

Ignat Loskutov in pro.cxx
ну на то он и type erasure
источник

SS

Sergey Sobolev in pro.cxx
Kirill
А ещё работает, если обернуть лямбды в std::function
Вот так например
std::function<bool(int)> f_a = [&] (const T & arg) {return a == arg;};
std::function<bool(int)> f_b = [&] (const T & arg) {return b == arg;};

return foo (x, f_a, f_b);
да, и это тоже логично, потому что теперь тип у них std::function<bool(int)>
источник

K

Kirill in pro.cxx
Офигеть. Ладно спасибо, буду знать
источник