Кресты / Говнокод #19859 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
int a = -1;
while(+a){
    if(a == 0) break;
}

Запостил: puksus puksus, (Updated )

Комментарии (27) RSS

    • наверно. никто не знает. но может просто кто-то извратный вечный цикл так решил написать.
      Ответить
  • Ох тыж, а что в С++ нельзя переопределить унарные операторы!? Даже в С++17?
    Ответить
      • И даже каким-нибудь #ifdef int #undef int? или g++ -Dallow_integral_literals?
        Ответить
        • У определённых пользователем типов можно переопределять в т.ч. унарные операторы, у встроенных - нет.
          Ответить
            • Кстати, мне показалось жутко неинтуитивным, что выражение fake_int a = 1; вызывает конструктор, а не operator=. При разбиении же выражения на две строки в первой вызовется конструктор, а во второй — operator=.

              fake_int a = 1; // Тут вызовется конструктор fake_int(1)
              fake_int b; // А тут вызовется конструктор fake_int() без аргументов
              b = 1; // А тут вызовется operator=(1)


              Мне уже страшно представить, во что превращается программа с неэлементарными типами.
              Ответить
              • fake_int f()
                {
                  return 1;
                }
                
                void main()
                {
                  fake_int a = f(); // И здесь тоже, вполне возможно, вызовется конструктор
                }
                Ответить
              • > Class obj = init;
                Это альтернативный способ вызова конструктора просто... (ваш кеп). В таком случае вообще никогда оператор присваивания не вызовется (unless его кто-то специально не дернет из конструктора).
                Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8