блог-форум о программировании

Вы не вошли.

#1 2017-11-20 16:04:52

Majestio
Администратор
Здесь с 2017-11-17
Сообщений: 74
Windows 10Firefox 57.0

C++ = Трюки


C++ = Трюки


Обмен значениями без временной переменной
a^=b^=a^=b;
Короткая запись "если i или j меньше 0"
if ((i|j)<0) ...
Смещение класса/структуры
int ofs = (int)&((Class*)0)->element;
Duff''s device
#include <iostream>
using namespace std;
 
void foo(const int i) {
  cout << "foo(" << i <<")" << endl;
}
 
int main() {
  int c = 10;
  switch(c&3) while((c-=4)>=0) {
    foo(c); case 3:
    foo(c); case 2:
    foo(c); case 1:
    foo(c); case 0:;
  }
  return 0;
}
Художественное оформление true/false
#define TRUE  ''/''/''/''
#define FALSE ''-''-''-''
Чудная выборка символа
int direction = 0;
char direction_name = direction["FBLR"];
Операторы "головастики"
// -~x == x + 1
// ~-x == x - 1
// объяснение:
// -~x = ~(~x) + 1 == x + 1;
// ~-x = (~-x + 1) - 1 == -(-x) - 1 == x - 1;
Быстрый обратный квадратный корень (маленькая точность)
float InvSqrt (float x){
  float xhalf = 0.5f*x;
  int i = *(int*)&x;
  i = 0x5f3759df - (i>>1);
  x = *(float*)&i;
  x = x*(1.5f - xhalf*x*x);
  return x;
} 
Опрератор "перейти" -->
void doStuff(int count) {
  while(count --> 0) {
    do();
  }
}

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] CCBot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.118 сек, 7 запросов выполнено - Использовано памяти: 2.08 Мбайт (Пик: 2.63 Мбайт) ]

000webhost logo