nixp.ru v3.0

28 мая 2017,
воскресенье,
19:43:46 MSK

DevOps с компанией «Флант»
anonymous написал 28 декабря 2005 года в 22:14 (297 просмотров) Ведет себя неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.

inline void swap(int& a, int& b)

{

a ^= b ^= a ^= b;

}

void main(void)

{

int i = 1, j = 2;

swap(i, j);

printf(«i = %d, j = %d\n», i, j);

}

и что такое ^= ? какой ответ будет выводиться? можно ли какой нибудь пример с использованием встроенной функции самый простой без указателей?

int func(int i, int j = 1, int k = 2);

int func(int i, int j, int k)

{

return i + j + k;

}

void main(void)

{

int i, j, k;

i = func(1, 3);

printf(«\n%d\n», i);

}

что будет выводиться? это пример программы с использованием аргументов по умолчанию. зачем второй раз писать int func(int i, int j, int k)? и что значит return i + j + k;?

PS у меня экзамен про программированию, специальность не программная так что по возможности объясните «для тупых":) Спасибо!

Sasha2

Прочти про перегрузку функций.

На первый вопрос я ответить не могу. Действительно сам первый раз вижу оператор ^.

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

Genie

^= — оператор «побитовое исключающее или с присваиванием»

в функции swap содержится ошибка: производятся операции над указателями на значения, а не над самими значениями.

а что будет выводиться — ну, можно и схитрить — перевести название «swap» ;))

anonymous
Sasha2
Прочти про перегрузку функций.

На первый вопрос я ответить не могу. Действительно сам первый раз вижу оператор ^.

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

причем тут перегрузка?

во втором примере выводиться будет 6?

Sasha2

Я уже давно C++ не занимаюсь, но что-то помниться, что перегрузка — это возможность использования разных шаблонов с одним и тем же именем функции, а конкретная функция уже выбирается исходя из конкретно указанных аргументов (например, их числа и типов)

metal
Genie
^= — оператор «побитовое исключающее или с присваиванием»

в функции swap содержится ошибка: производятся операции над указателями на значения, а не над самими значениями.

а что будет выводиться — ну, можно и схитрить — перевести название «swap» ;))

Почему над указателями? Над значения по ссылкам. Специально проверил, меняются именно значения.Хотя именно с зачениями по указателям такой трюк не пройдет.

metal

1) Возьми и скомпилируй и сам увидишь, дам подсказку не под win надо сделать

int main, и подключить stdio.h

2) Подразумевается что первая строка это объявление функции, а вторая имплеминатация. Параметры по-умолчанию указываются только в декларации.

Uncle Theodore
Genie
в функции swap содержится ошибка: производятся операции над указателями на значения, а не над самими значениями.

Это не ошибка, почему это ошибка?

a^=b это сокращенная версия записи a = a ^ b

а ^ — таки да, побитовое исключающее ИЛИ (XOR). Т.е., если например

a = 1001

b = 0111

то a ^ b = 1110

Функция swap переставляет значения a и b. Я писал про такой прикол как-то, на этой же доске.

Good Luck,

UT