среда, 26 марта 2008 г.

Кое-какие трюки

1. Запись блока операторов в одну строку через запятую:
Оказывается запись:
{
a=3;
b=4;
c=1;
}
Равносильна записи:
a=3, b=4, c=1;

2. Можно еще и так:
float a = (flag ? sin : cos)(x);
В данном случае результатом выполнения (flag?sin:cos) будет по видимому адрес вызваемой функции, которой передатся параметр (х).

3. Меняем индекс и массив местами
Имеем:
int a[10], i;

Обращения a[i] и i[a] - эквивалентны. Ведь на самом деле - a[i] == *(a + i) == *(i + a) == i[a]. От перемены мест слагаемых сумма не изменяется!

4. Может ли функция находится слева от оператора присваивания?

К примеру?
f() = 5;

Да запросто. Нужно только, что бы функция возвращала ссылку на переменную соответствующего типа.

int x;

int &f()
{
return x;//Возврат ссылки на х.
}

main()
{
f() = 5;
cout << x;
return 0;
}

Комментариев нет: