Re[7]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 04.04.25 12:09
Оценка: +2 :))
Здравствуйте, alpha21264, Вы писали:

A>На самом деле надо так:


A>
A>#define SUM(a,b) (a)+(b)
A>


Ух ты! И что выведет эта программа?

#include <iostream>

#define SUM(a,b) (a)+(b)

int main() {
    std::cout << SUM(1, 1) * 10 << std::endl;
}


--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 04.04.2025 12:10 rg45 . Предыдущая версия .
Re[2]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 04.04.25 08:43
Оценка: 3 (2) :)
Здравствуйте, sergii.p, Вы писали:

SP>Ещё бывает по шаблонам спрашиваю. Прошу написать функцию sum, которая суммирует различные типы


SP>
SP>sum(std::string{""}, "abc");
SP>sum(0, 1.0);
SP>


http://coliru.stacked-crooked.com/a/c4b88d70e5067c24

#include <iostream>

template <typename T, typename...X>
decltype(auto) sum(T&& t, X&&...x)
requires requires {(std::forward<T>(t) + ... + std::forward<X>(x));}
{
    return (std::forward<T>(t) + ... + std::forward<X>(x));
}

int main() {
    std::cout << sum("Hello", std::string(", World"), '!') << std::endl;
}


Так норм?

Это, скажем так, параноидальный уровень обобщенности. Этот вариант учитывает, что operator+ может быть перегружен пользователем и иметь побочные эффекты и самую безумную семантику. Например, модифицировать операнды.

Если считать, что операция сложения — это всегда rvalue без каких-либо побочных эффектов и гарантирует неизменность операндов, тогда всё упрощается, конечно:

http://coliru.stacked-crooked.com/a/245d934bcd9b9088

#include <iostream>

auto sum(const auto& t, const auto&...x)
requires requires {(t + ... + x);}
{
    return (t + ... + x);
}

int main() {
    std::cout << sum("Hello", std::string(", World"), '!') << std::endl;
}
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 04.04.2025 9:49 rg45 . Предыдущая версия . Еще …
Отредактировано 04.04.2025 9:45 rg45 . Предыдущая версия .
Отредактировано 04.04.2025 9:38 rg45 . Предыдущая версия .
Re[7]: Накидайте плиз задачек на знание языка Си++
От: T4r4sB Россия  
Дата: 04.04.25 12:11
Оценка: +1 -1 :)
Здравствуйте, alpha21264, Вы писали:

A>На самом деле надо так:


A>
A>#define SUM(a,b) (a)+(b)
A>


А что тогда выведет такая программа?

std::cout << SUM(2, 2) * 2 << std::endl;
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Отредактировано 04.04.2025 12:12 T4r4sB . Предыдущая версия .
Re: Накидайте плиз задачек на знание языка Си++
От: B0FEE664  
Дата: 10.04.25 17:21
Оценка: +1 -1 :)
Здравствуйте, C0x, Вы писали:

C0x>Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.

//Problem 2: what is wrong here? Plz fix.

enum class Mode{ way, no_way };

inline Mode GetMode()
{
  return Mode::no_way;
}


struct X
{
      static bool AmIM()
      {
#ifdef M_D_C
          bool res = true;
#else
          bool res = false;
#endif
          return res;
      }

      static bool isM_D_C_And_Way()
      {
          return (AmIM && GetMode() == Mode::way);
      }
};
И каждый день — без права на ошибку...
Re[2]: Накидайте плиз задачек на знание языка Си++
От: pilgrim_ Россия  
Дата: 20.08.25 18:32
Оценка: +2 -1
Здравствуйте, Hоmunculus, Вы писали:

H>Что будет на экране:


H>
H>for (int i = 0; i < 10; i++)
H>    std::cout << 1000000000*i << endl;
H>


Этот вопрос имхо скорее сюда
Автор: alpha21264
Дата: 31.07 13:14
подходит, т.к. ответ зависит от компилятора и опций оптимизации (из-за UB при переполнении знаковых целых).
GCC этим пользуется, у clang/msvc пока вывод "ожидаемый".
Re[7]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 04.04.25 11:42
Оценка: +2
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, rg45, Вы писали:


_>>>
_>>>#define SUM(a,b) a+b

R>>Мы Вам перезвоним.

_>[url=https://i.imgur.com/eRxF3jP.png]Image: eRxF3jP.png[/url]


К этому нужно ещё задавать вопрос: "что выведет эта программа:"

#include <iostream>

#define SUM(a,b) a+b

int main() {
    std::cout << SUM(1<<1, 1) << std::endl;
}
--
Справедливость выше закона. А человечность выше справедливости.
Re[6]: Накидайте плиз задачек на знание языка Си++
От: alpha21264 СССР  
Дата: 04.04.25 11:56
Оценка: :))
Здравствуйте, rg45, Вы писали:

_>>
_>>#define SUM(a,b) a+b
_>>

_>>

R>Мы Вам перезвоним.


Когда выяснится, что у вас все "амбициозно растут" вместо того чтобы работать.
На самом деле надо так:

#define SUM(a,b) (a)+(b)

Течёт вода Кубань-реки куда велят большевики.
Re[3]: Накидайте плиз задачек на знание языка Си++
От: B0FEE664  
Дата: 11.04.25 08:05
Оценка: -1 :)
Здравствуйте, sergii.p, Вы писали:

SP>только то, что после AmIM забыли скобочки?


Да. Как и "Problem 1".
Ничего интересного, кроме того, что подобный код прошёл код-ревью, компилируется, выполняется и не содержит UB.
И каждый день — без права на ошибку...
Re[5]: Накидайте плиз задачек на знание языка Си++
От: B0FEE664  
Дата: 11.04.25 08:15
Оценка: -1 :)
Здравствуйте, rg45, Вы писали:

R>Я больше скажу, если даже исправить эту ошибку, то ничего в том примере не изменится. isM_D_C_And_Way как возвращала всегда false, так и будет возвращать. Независимо от состояния макроса M_D_C.


В этом примере — да, а в реальности Mode читается из файла.
И каждый день — без права на ошибку...
Re: Накидайте плиз задачек на знание языка Си++
От: Pavel Dvorkin Россия  
Дата: 04.04.25 07:54
Оценка: 6 (1)
Здравствуйте, C0x, Вы писали:

C0x>Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.


У меня нет, но поиск дал вот это

http://www.gotw.ca/gotw/
With best regards
Pavel Dvorkin
Re: Накидайте плиз задачек на знание языка Си++
От: sergii.p  
Дата: 04.04.25 08:22
Оценка: 4 (1)
Здравствуйте, C0x, Вы писали:

C0x>Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.


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

struct Base
{
    virtual void foo() const { std::cout << "base\n"; }
};

struct Derived: Base {
    virtual void foo() { std::cout << "derived\n"; }
    private: std::string trash {"123456789123456789"};
};

int main() {
    std::vector<Base> vec;
    vec.push_back(Derived{});
    for(const auto el: vec) {
        el.foo();
    }
}


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

Ещё бывает по шаблонам спрашиваю. Прошу написать функцию sum, которая суммирует различные типы

sum(std::string{""}, "abc");
sum(0, 1.0);


но это если кандидат отвечает бодро и говорить особо уже не о чем. Большинству хватает первой задачи. К тому же тут всего полчаса — маловато.
Отредактировано 04.04.2025 8:24 sergii.p . Предыдущая версия .
Re: Накидайте плиз задачек на знание языка Си++
От: _NN_  
Дата: 10.06.25 06:49
Оценка: 1 (1)
Здравствуйте, C0x, Вы писали:

Пожалуйста:

void duplicate(std::vector<int>& v)
{
  size_t i = 0;
  size_t count = v.size();
  for (auto const& e : v)
  {
    if (i == count)
      break;
    v.push_back(e);
    i++;
  }
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Отредактировано 10.06.2025 6:51 _NN_ . Предыдущая версия .
Накидайте плиз задачек на знание языка Си++
От: C0x  
Дата: 04.04.25 07:46
Оценка: :)
Коллеги накидайте плиз задачек для собеза по Си++. Нужно провести скрининг кандидатов примерно на 30 минут. Я никогда не проводил, да и на плюсах давненько не писал.
Основные требования: стандарт 2003 год — это кодовая база с которой кандидату придется работать.
Примерно, как я себе это представляю: мы с кандидатом открываем онлайн редактор (с совместным доступом к коду), там список задачек в виде кода и вопроса: what is wrong with this code? How to fix? Таким образом проверяются различные аспекты языка и статистически выбираем лучшего кандидата который закроет наибольшее кол-во. К примеру,
============================================
Problem 1: what is wrong here? Plz fix.
#include <iostream>
using namespace std;

int main() {
int* arr = new int(5);
delete[] arr;
return 0;
}
============================================
и т.д.
Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.
Re[4]: Накидайте плиз задачек на знание языка Си++
От: kov_serg Россия  
Дата: 04.04.25 11:06
Оценка: +1
Здравствуйте, sergii.p, Вы писали:

SP>Но обычно то я вижу что-то такое:


#define SUM(a,b) a+b

Re[5]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 04.04.25 11:08
Оценка: +1
Здравствуйте, kov_serg, Вы писали:

_>
_>#define SUM(a,b) a+b
_>

_>

Мы Вам перезвоним.
--
Справедливость выше закона. А человечность выше справедливости.
Re[4]: Накидайте плиз задачек на знание языка Си++
От: alpha21264 СССР  
Дата: 04.04.25 12:02
Оценка: :)
Здравствуйте, sergii.p, Вы писали:

SP>Здравствуйте, alpha21264, Вы писали:


A>>Ну с первой задачей я справлюсь.

A>>А про шаблоны честно скажу, что не умею.
A>>Откажете?

SP>я вообще никогда не отказываю. Я говорю уровень кандидата. А уже руководство принимает решение: соответствует ли уровень запросам. Но вообще если senior говорит, что в шаблоны не умеет, то большой вопрос почему он считает себя сеньёром.


Наверное, потому что компьютер, с которого ты написал своё сообщение, сделан с помощью моей программы...
И шаблоны для этого не понадобились, потому что шаблоны — зло.

Вот представь себе, что программы живут долго, в некоторых из них встречаются строчки типа #ifdef VAX_VMS,
и вдруг там встречается кусок кода, с навороченными шаблонами, и никто (включая автора) не знает, как это работает.

Течёт вода Кубань-реки куда велят большевики.
Re[7]: Накидайте плиз задачек на знание языка Си++
От: kov_serg Россия  
Дата: 04.04.25 12:27
Оценка: :)
Здравствуйте, alpha21264, Вы писали:

A>На самом деле надо так:

Внесём еще правок
#define SUM(V,Y) ((V)+(Y))

И да для SUM(i++,i++) будут сайд эффекты.
Так же как и для
int mean3(int a,int b,int c) { return (a+b+c)/3; }
Но это же c++ тут надо знать где грабли разложены. Потому как они почти всюду
Отредактировано 04.04.2025 12:27 kov_serg . Предыдущая версия .
Re[8]: Накидайте плиз задачек на знание языка Си++
От: alpha21264 СССР  
Дата: 04.04.25 13:35
Оценка: :)
Здравствуйте, T4r4sB, Вы писали:

TB>Здравствуйте, alpha21264, Вы писали:


A>>На самом деле надо так:


A>>
A>>#define SUM(a,b) (a)+(b)
A>>


TB>А что тогда выведет такая программа?


TB>
TB>std::cout << SUM(2, 2) * 2 << std::endl;
TB>


Да, нехорошо-с. Тогда вот так:

#define SUM(a,b) ((a)+(b))

Течёт вода Кубань-реки куда велят большевики.
Re[2]: Накидайте плиз задачек на знание языка Си++
От: sergii.p  
Дата: 11.04.25 05:13
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, C0x, Вы писали:


C0x>>Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.

BFE>
BFE>      static bool isM_D_C_And_Way()
BFE>      {
BFE>          return (AmIM && GetMode() == Mode::way);
BFE>      }
BFE>};
BFE>


только то, что после AmIM забыли скобочки?
Re[2]: Накидайте плиз задачек на знание языка Си++
От: B0FEE664  
Дата: 21.08.25 16:56
Оценка: +1
Здравствуйте, Hоmunculus, Вы писали:

H>Чтоб нули вам не считать — подсказка — там миллиард

Чтоб нули не считать, следует использовать современную запись:

for (int i = 0; i < 10; i++)
    std::cout << 1'000'000'000*i << endl;
И каждый день — без права на ошибку...
Re[9]: Накидайте плиз задачек на знание языка Си++
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.08.25 18:40
Оценка: +1
Здравствуйте, rg45, Вы писали:

R>А сайд эффекты, это когда:


R>
R>#define MIN(V,Y) ((V)<(Y) ? (V) : (Y))
R>// . . .
R>MIN(++a, ++b)
R>


Вот по-хорошему, увидев такой код, человек должен стремиться не понять его, а удалить...
Re[2]: Накидайте плиз задачек на знание языка Си++
От: C0x  
Дата: 04.04.25 07:56
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, C0x, Вы писали:


C0x>>Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.


PD>У меня нет, но поиск дал вот это


PD>http://www.gotw.ca/gotw/


А он открывается у тебя? У меня пишет This page isn’t working
Re[3]: Накидайте плиз задачек на знание языка Си++
От: C0x  
Дата: 04.04.25 07:56
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Здравствуйте, C0x, Вы писали:


C0x>>>Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.


PD>>У меня нет, но поиск дал вот это


PD>>http://www.gotw.ca/gotw/


C0x>А он открывается у тебя? У меня пишет This page isn’t working


А сорри, видимо из-за VPN.
Re[3]: Накидайте плиз задачек на знание языка Си++
От: Pavel Dvorkin Россия  
Дата: 04.04.25 07:58
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>А он открывается у тебя? У меня пишет This page isn’t working


Вполне нормально.
Попробуй из Инкогнито, из иного браузера, иного провайдера.

Там, кстати, http, не https, может, в этом причина ?
With best regards
Pavel Dvorkin
Re[2]: Накидайте плиз задачек на знание языка Си++
От: alpha21264 СССР  
Дата: 04.04.25 08:30
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>но это если кандидат отвечает бодро и говорить особо уже не о чем. Большинству хватает первой задачи. К тому же тут всего полчаса — маловато.


Ну с первой задачей я справлюсь.
А про шаблоны честно скажу, что не умею.
Откажете?

Течёт вода Кубань-реки куда велят большевики.
Re[4]: Накидайте плиз задачек на знание языка Си++
От: C0x  
Дата: 04.04.25 09:11
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, C0x, Вы писали:


C0x>>А он открывается у тебя? У меня пишет This page isn’t working


PD>Вполне нормально.

PD>Попробуй из Инкогнито, из иного браузера, иного провайдера.

PD>Там, кстати, http, не https, может, в этом причина ?


выше отписал, проблема оказалась в моем VPN.
Re: Накидайте плиз задачек на знание языка Си++
От: DiPaolo Россия  
Дата: 04.04.25 09:12
Оценка:
Есть конечно такие полезные ресурсы:
https://github.com/notescs/notes/tree/main/C-CPP-OOPS-for-Interviews
https://github.com/DopplerHQ/awesome-interview-questions?tab=readme-ov-file#c

Но лучше исходить из своих целей. Что за человек и с какими навыками нужен. От этого и выбирать задачи и вопросы. Одно дело, когда надо с нуля по архитектуре что-то делать. Другое – копипастить и поддерживать пятилетний продукт и там главное – аккуратность и не накосячить. Одно дело: числодробилка в сишном стиле, другое – асинхронный сервер и работа с базами.
Патриот здравого смысла
Re[2]: Накидайте плиз задачек на знание языка Си++
От: C0x  
Дата: 04.04.25 09:36
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>Есть конечно такие полезные ресурсы:

DP>- https://github.com/notescs/notes/tree/main/C-CPP-OOPS-for-Interviews
DP>- https://github.com/DopplerHQ/awesome-interview-questions?tab=readme-ov-file#c

DP>Но лучше исходить из своих целей. Что за человек и с какими навыками нужен. От этого и выбирать задачи и вопросы. Одно дело, когда надо с нуля по архитектуре что-то делать. Другое – копипастить и поддерживать пятилетний продукт и там главное – аккуратность и не накосячить. Одно дело: числодробилка в сишном стиле, другое – асинхронный сервер и работа с базами.


Спасибо. Там несколько этапов интервью, мне нужно для скриннига, чтобы понять что человек не просто так Си++ в резюме написал для полноты картины
Re[3]: Накидайте плиз задачек на знание языка Си++
От: sergii.p  
Дата: 04.04.25 10:23
Оценка:
Здравствуйте, rg45, Вы писали:

R>Так норм?


R>Это, скажем так, параноидальный уровень обобщенности.


вот на это я и рассчитываю. Задачу можно всегда покопать вглубь. Но обычно для меня достаточно чего-то проще

template<typename T1, typename T2>
auto sum(T1 v1, T2 v2) {
    return v1 + v2;
}


если человек показывает что-то лучшее — только плюс. Если просто укажет моменты для улучшения — то тоже ок.

Но обычно то я вижу что-то такое:

template<typename T>
T sum(T v1, T v2) {
    return v1 + v2;
}


и потом с интересом наблюдаю как человек разбирается в простыне ошибок. Тоже небезынтересный навык.
Re[3]: Накидайте плиз задачек на знание языка Си++
От: sergii.p  
Дата: 04.04.25 10:42
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Ну с первой задачей я справлюсь.

A>А про шаблоны честно скажу, что не умею.
A>Откажете?

я вообще никогда не отказываю. Я говорю уровень кандидата. А уже руководство принимает решение: соответствует ли уровень запросам. Но вообще если senior говорит, что в шаблоны не умеет, то большой вопрос почему он считает себя сеньёром.
Re[6]: Накидайте плиз задачек на знание языка Си++
От: kov_serg Россия  
Дата: 04.04.25 11:37
Оценка:
Здравствуйте, rg45, Вы писали:

_>>
_>>#define SUM(a,b) a+b

R>Мы Вам перезвоним.

Re[8]: Накидайте плиз задачек на знание языка Си++
От: kov_serg Россия  
Дата: 04.04.25 11:45
Оценка:
Здравствуйте, rg45, Вы писали:

R>К этому нужно ещё задавать вопрос: "что выведет эта программа:"

Вообще-то это был ответ на "Но обычно то я вижу что-то такое"
Re[9]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 04.04.25 11:55
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Вообще-то это был ответ на "Но обычно то я вижу что-то такое"


Ладно, не оправдывайся.
--
Справедливость выше закона. А человечность выше справедливости.
Re[8]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 04.04.25 12:45
Оценка:
Здравствуйте, kov_serg, Вы писали:

A>>На самом деле надо так:

_>Внесём еще правок
_>
_>#define SUM(V,Y) ((V)+(Y))
_>

_>И да для SUM(i++,i++) будут сайд эффекты.
_>Так же как и для
_>
_>int mean3(int a,int b,int c) { return (a+b+c)/3; }
_>


_>Но это же c++...


Ага. Восьмидесятый уровень
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 04.04.2025 13:27 rg45 . Предыдущая версия .
Re[8]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 04.04.25 13:06
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Внесём еще правок

_>
_>#define SUM(V,Y) ((V)+(Y))
_>

_>И да для SUM(i++,i++) будут сайд эффекты.

Будет UB. В старых терминах — множественная модификация переменной между двумя точками следования. Сейчас термины уже другие (sequenced before, sequenced after, etc.), но UB никуда не делось.

А сайд эффекты, это когда:

#define MIN(V,Y) ((V)<(Y) ? (V) : (Y))
// . . .
MIN(++a, ++b)
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 04.04.2025 13:15 rg45 . Предыдущая версия . Еще …
Отредактировано 04.04.2025 13:14 rg45 . Предыдущая версия .
Отредактировано 04.04.2025 13:12 rg45 . Предыдущая версия .
Re[9]: Накидайте плиз задачек на знание языка Си++
От: kov_serg Россия  
Дата: 04.04.25 17:07
Оценка:
Здравствуйте, rg45, Вы писали:

_>>Но это же c++...

R>Ага. Восьмидесятый уровень

compatibility mode
Re[5]: Накидайте плиз задачек на знание языка Си++
От: CEMb  
Дата: 07.04.25 11:01
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>компьютер, с которого ты написал своё сообщение,

A>сделан с помощью моей программы...

Что?...
Re[8]: Накидайте плиз задачек на знание языка Си++
От: CEMb  
Дата: 07.04.25 11:10
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>И да для SUM(i++,i++) будут сайд эффекты.

_>Так же как и для
_>
_>int mean3(int a,int b,int c) { return (a+b+c)/3; }
_>
Но это же c++ тут надо знать где грабли разложены. Потому как они почти всюду


Надо избегать грабли, если есть подозрение на грабли, плюс подозрение на грабли в будущих редакциях.
Re[7]: Накидайте плиз задачек на знание языка Си++
От: CEMb  
Дата: 07.04.25 11:12
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Когда выяснится, что у вас все "амбициозно растут" вместо того чтобы работать.

A>На самом деле надо так:

A>
A>#define SUM(a,b) (a)+(b)
A>


Никто выше не спросил про SUM("a", "b");
Re[3]: Накидайте плиз задачек на знание языка Си++
От: B0FEE664  
Дата: 07.04.25 11:34
Оценка:
Здравствуйте, rg45, Вы писали:

  Скрытый текст
SP>>Ещё бывает по шаблонам спрашиваю. Прошу написать функцию sum, которая суммирует различные типы

SP>>
SP>>sum(std::string{""}, "abc");
SP>>sum(0, 1.0);
SP>>


R>http://coliru.stacked-crooked.com/a/c4b88d70e5067c24

R>
R>#include <iostream>

R>template <typename T, typename...X>
R>decltype(auto) sum(T&& t, X&&...x)
R>requires requires {(std::forward<T>(t) + ... + std::forward<X>(x));}
R>{
R>    return (std::forward<T>(t) + ... + std::forward<X>(x));
R>}

R>int main() {
R>    std::cout << sum("Hello", std::string(", World"), '!') << std::endl;
R>}
R>

R>Так норм?
ага

R>Это, скажем так, параноидальный уровень обобщенности. Этот вариант учитывает, что operator+ может быть перегружен пользователем и иметь побочные эффекты и самую безумную семантику. Например, модифицировать операнды.

Параноидальный, да, но от дурака не спасает:
  std::cout << sum("1234567890", 'a') << std::endl;

И каждый день — без права на ошибку...
Re[4]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 07.04.25 11:59
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Параноидальный, да, но от дурака не спасает:

BFE>
BFE>  std::cout << sum("1234567890", 'a') << std::endl;
BFE>

BFE>

Блин, не сразу понял суть проблемы. Ну да, от дураков не спастись.

Ну, с другой стороны, дурак с тем же успехом может написать: "1234567890" + 'a'. Так что, вряд ли корень зла находится в функции sum.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 07.04.2025 12:28 rg45 . Предыдущая версия . Еще …
Отредактировано 07.04.2025 12:01 rg45 . Предыдущая версия .
Re: Накидайте плиз задачек на знание языка Си++
От: The Passenger СССР  
Дата: 09.04.25 05:27
Оценка:
Здравствуйте, C0x, Вы писали:

спроси дипсика
Re[4]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 11.04.25 08:09
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Да. Как и "Problem 1".

BFE>Ничего интересного, кроме того, что подобный код прошёл код-ревью, компилируется, выполняется и не содержит UB.

Я больше скажу, если даже исправить эту ошибку, то ничего в том примере не изменится. isM_D_C_And_Way как возвращала всегда false, так и будет возвращать. Независимо от состояния макроса M_D_C.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 11.04.2025 8:10 rg45 . Предыдущая версия .
Re[6]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 11.04.25 08:24
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>В этом примере — да, а в реальности Mode читается из файла.


Ну вот этот момент вносит определённую долю удивления при чтении примера. Логика примера теряется. Получается, что все эти "много букв" только ради того, чтоб труднее было найти пропущенные скобки. Возможно, имело бы смысл показать только объявление GetMode.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 11.04.2025 8:26 rg45 . Предыдущая версия .
Re: Накидайте плиз задачек на знание языка Си++
От: m2user  
Дата: 09.06.25 03:23
Оценка:
C0x>Основные требования: стандарт 2003 год — это кодовая база с которой кандидату придется работать.

А с чем связано такое ограничение для кодовой базы? Компилятор не поддерживает более свежие стандарты?
Re: Накидайте плиз задачек на знание языка Си++
От: LaptevVV Россия  
Дата: 09.06.25 04:07
Оценка:
C0x>Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.
Есть книжка
Хорошо ли вы знаете С++: https://book-pc.ru/programmirovanie/3154-horosho-li-vy-znaete-c.html
Наверное, где-то pdf можно найти...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Накидайте плиз задачек на знание языка Си++
От: SaZ  
Дата: 09.06.25 15:29
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Коллеги накидайте плиз задачек для собеза по Си++. Нужно провести скрининг кандидатов примерно на 30 минут. Я никогда не проводил, да и на плюсах давненько не писал.

C0x>Основные требования: стандарт 2003 год — это кодовая база с которой кандидату придется работать.
C0x>...

Казолось бы на дворе 2025 год, уже 14 лет как есть цпп11 в современных и не очень компиляторах. Если вам нужен человек на поддержку mfc и вы такого найдёте, то это явно будет не зелёный студент а кто-то из старшего поколения. Думаю там тестовые просто не нужны, достаточно будет пообщаться.
Re: Накидайте плиз задачек на знание языка Си++
От: kov_serg Россия  
Дата: 09.06.25 18:49
Оценка:
Здравствуйте, C0x, Вы писали:

Есть строка, в которой записаны русские слова, разделённые пробелом (кодировка utf8). Разбить все слова на слоги.
Например: "накидайте плиз задачек" -> "на-ки-дай-те плиз за-да-чек"
Re[2]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 10.06.25 10:34
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Пожалуйста:


_NN>
_NN>void duplicate(std::vector<int>& v)
_NN>{
_NN>  size_t i = 0;
_NN>  size_t count = v.size();
_NN>  for (auto const& e : v)
_NN>  {
_NN>    if (i == count)
_NN>      break;
_NN>    v.push_back(e);
_NN>    i++;
_NN>  }
_NN>}
_NN>


Хорошая задачка. Тут есть, о чём поговорить. Помимо исправления проблемы, можно предложить отрефакторить и обобщить на несколько типов контейнеров и произвольный тип элемента.
--
Справедливость выше закона. А человечность выше справедливости.
Re[3]: Накидайте плиз задачек на знание языка Си++
От: _NN_  
Дата: 10.06.25 11:19
Оценка:
Здравствуйте, rg45, Вы писали:

R>Хорошая задачка. Тут есть, о чём поговорить. Помимо исправления проблемы, можно предложить отрефакторить и обобщить на несколько типов контейнеров и произвольный тип элемента.


А ещё справшиваем, почему же не реализован контейней с итератором так, чтобы этот код мог бы всегда работать, ведь это несложная задача.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Накидайте плиз задачек на знание языка Си++
От: Went  
Дата: 10.06.25 18:46
Оценка:
Здравствуйте, kov_serg, Вы писали:
_>Есть строка, в которой записаны русские слова, разделённые пробелом (кодировка utf8). Разбить все слова на слоги.
_>Например: "накидайте плиз задачек" -> "на-ки-дай-те плиз за-да-чек"
Интересная задачка. Разве есть какой-то формальный признак к какой гласной лепить согласную? Например, слово "паркет", это "пар-кет", "па-ркет", или "парк-ет"?
Re[3]: Накидайте плиз задачек на знание языка Си++
От: kov_serg Россия  
Дата: 10.06.25 19:47
Оценка:
Здравствуйте, Went, Вы писали:

W>Интересная задачка. Разве есть какой-то формальный признак к какой гласной лепить согласную? Например, слово "паркет", это "пар-кет", "па-ркет", или "парк-ет"?


1. Слог образует гласный звук:
    сте-на, ба-ран (с-тена, бара-н — неправильно).

2. Слог начинается с согласного, который стоит перед гласной:
    мо-ло-ко, ко-ра (мол-око, кор-а — неправильно).

3. Буквы ь, ъ (которые не означают звуков), й нельзя отрывать от предыдущего слога:
    лай-ка, конь-ки, подъ-езд (ла-йка, кон-ьки, под-ъезд — неправильно).

4. Глухие согласные отходят к следующему слогу:
    то-чка, мо-шка (в традиционной школе верно также: точ-ка, мош-ка).

5. Звонкие согласные [й], [р], [р’], [л], [л’], [м], [м’], [н], [н’] с последующим шумным согласным отходят к предыдущему слогу:
    кор-ка, бул-ка (в традиционной школе верно также: ко-рка, бу-лка).

6. Согласные буквы, образующие один звук, нельзя разносить в разные слоги. Один звук образуют сочетания зж [ж:], тся, ться [ц:].
    у-е-зжать, но-си-тся, де-ла-ться (в традиционной школе верно также: у-ез-жать, но-сит-ся, де-лать-ся).

7. Сдвоенные согласные в середине слова относят к следующему слогу:
    кла-ссный, хо-ккей, те-ннис (в традиционной школе верно также: клас-сный, хок-кей, тен-нис).

Слоги делятся по восходящей звучности. Каждый звук имеет звучность от 1 до 4: 4 — гласные, 3 — сонорные, 2 — шумные звонкие, 1 — шумные глухие. 

8. Конец слога должен быть с максимальной звучностью (цифра 4):
    ко-ле-со (14-34-14), ко-мпью-тер (14-31 4-143).

9. Сонорные между гласными относят к следующему слогу: ка-рман (14-3343). Допускается вариант: кар-ман (ошибки не будет).
    Если есть сочетание сонорного и шумного, то раздел ставится между ними: пар-та (143-14).

10. Й всегда остается с предыдущим слогом: тай-на (143-34).
Отредактировано 10.06.2025 19:49 kov_serg . Предыдущая версия .
Re[4]: Накидайте плиз задачек на знание языка Си++
От: Went  
Дата: 11.06.25 08:43
Оценка:
Здравствуйте, kov_serg, Вы писали:
_>
_>...
_>

Интересно, конечно, не знал про такие правила, хотя и там полно исключений. Но, все же, это скорее филологическая задача, нежели на знание С++.
Re[5]: Накидайте плиз задачек на знание языка Си++
От: kov_serg Россия  
Дата: 11.06.25 10:03
Оценка:
Здравствуйте, Went, Вы писали:


W>Интересно, конечно, не знал про такие правила, хотя и там полно исключений. Но, все же, это скорее филологическая задача, нежели на знание С++.

Тут важен подход к задаче, а не само решение
Re[6]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 11.06.25 11:33
Оценка:
Здравствуйте, kov_serg, Вы писали:

W>>Интересно, конечно, не знал про такие правила, хотя и там полно исключений. Но, все же, это скорее филологическая задача, нежели на знание С++.

_>Тут важен подход к задаче, а не само решение

Дайте мне поручение, а уж особым я его и сам сделаю. (С) Специалист по особым поручениям.
--
Справедливость выше закона. А человечность выше справедливости.
Re[4]: Накидайте плиз задачек на знание языка Си++
От: sergii.p  
Дата: 12.06.25 10:54
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, rg45, Вы писали:


R>>Хорошая задачка. Тут есть, о чём поговорить. Помимо исправления проблемы, можно предложить отрефакторить и обобщить на несколько типов контейнеров и произвольный тип элемента.


_NN>почему же не реализован контейней с итератором так, чтобы этот код мог бы всегда работать


так std::list вроде не инвалидирует ссылки. Или вопрос только касательно std::vector?
Re[5]: Накидайте плиз задачек на знание языка Си++
От: _NN_  
Дата: 19.06.25 08:55
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>Здравствуйте, _NN_, Вы писали:


_NN>>Здравствуйте, rg45, Вы писали:


R>>>Хорошая задачка. Тут есть, о чём поговорить. Помимо исправления проблемы, можно предложить отрефакторить и обобщить на несколько типов контейнеров и произвольный тип элемента.


_NN>>почему же не реализован контейней с итератором так, чтобы этот код мог бы всегда работать


SP>так std::list вроде не инвалидирует ссылки. Или вопрос только касательно std::vector?


Всё правильно. Заодно затрагивается почему и где уместней vector.
Вообще можно и для вектора сделать такие итераторы без инвалидации, но такой вектор кхе-кхе никто особо бы не использовал.
Ну и конечно вопрос на эту тему почему
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Накидайте плиз задачек на знание языка Си++
От: B0FEE664  
Дата: 20.08.25 16:56
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.


Просто задача на понимание.
Что будет выведено на экран:
#include <iostream>

int main()
{
    signed char ch = -0xA;
    std::cout << "ch = " << 0 + ch << '\n';
}
И каждый день — без права на ошибку...
Re: Накидайте плиз задачек на знание языка Си++
От: Hоmunculus  
Дата: 20.08.25 17:10
Оценка:
Здравствуйте, C0x, Вы писали:

Что будет на экране:

for (int i = 0; i < 10; i++)
    std::cout << 1000000000*i << endl;


Чтоб нули вам не считать — подсказка — там миллиард
Re[2]: Накидайте плиз задачек на знание языка Си++
От: T4r4sB Россия  
Дата: 20.08.25 19:23
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, C0x, Вы писали:


_NN>Пожалуйста:


_NN>
_NN>void duplicate(std::vector<int>& v)
_NN>{
_NN>  size_t i = 0;
_NN>  size_t count = v.size();
_NN>  for (auto const& e : v)
_NN>  {
_NN>    if (i == count)
_NN>      break;
_NN>    v.push_back(e);
_NN>    i++;
_NN>  }
_NN>}
_NN>


На эту же тему:
v.push_back(v[0])

Тут всё хитрее, чем кажется на второй взгляд

  Скрытый текст
почему этот код всегда работает О_О
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Отредактировано 20.08.2025 19:58 T4r4sB . Предыдущая версия .
Re[2]: Накидайте плиз задачек на знание языка Си++
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.08.25 18:42
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Есть строка, в которой записаны русские слова, разделённые пробелом (кодировка utf8). Разбить все слова на слоги.

_>Например: "накидайте плиз задачек" -> "на-ки-дай-те плиз за-да-чек"

Вроде это не такая уж и тривиальная вещь, разбить русские слова на слоги.
Re[10]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 21.08.25 20:11
Оценка:
Здравствуйте, Pzz, Вы писали:

R>>А сайд эффекты, это когда:


R>>
R>>#define MIN(V,Y) ((V)<(Y) ? (V) : (Y))
R>>// . . .
R>>MIN(++a, ++b)
R>>


Pzz>Вот по-хорошему, увидев такой код, человек должен стремиться не понять его, а удалить...


Вот и я о том же.
--
Справедливость выше закона. А человечность выше справедливости.
Re: Накидайте плиз задачек на знание языка Си++
От: gyraboo  
Дата: 21.08.25 20:53
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Коллеги накидайте плиз задачек для собеза по Си++.


Как склеить две арабские строки?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.