Форум программистов, компьютерный форум CyberForum.ru

Написать функцию swap - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Почему нельзя подставлять переменные в выражения #if #else? http://www.cyberforum.ru/cpp-beginners/thread1130277.html
Почему код работает, не должен же, потому что выражение стоящее после #if вычисляется на этапе компиляции, переменные подставлять нельзя?? #include <stdio.h> #include <iostream> using namespace std; int a = 9; int main(void){ #if a>99
C++ В массиве все четные элементы заменить максимальным В одномерном массиве все четные элементы заменить максимальным и отсортировать элементы массива по возрастанию. http://www.cyberforum.ru/cpp-beginners/thread1130253.html
C++ Поменять местами минимальный и максимальный элемент в каждом столбце матрицы
Дано матрицу размера 5 x 10. Превратить матрицу, поменяв местами минимальный и максимальный элемент в каждом столбце.
Найти средние арифметические значения элементов каждой строки матрицы C++
Задать матрицу произвольным способом. Найти средние арифметические значения элементов каждой строки.
C++ Найти количество элементов превышающих среднее арифметическое всех элементов массива http://www.cyberforum.ru/cpp-beginners/thread1130247.html
Дано одномерный массив из 15 целых чисел. Найти количество элементов превышающих среднее арифметическое всех элементов массива.
C++ Cколько раз встречаются числа с 4 одинаковыми цифрами Здравствуйте.Мне нужна помощь. Для всех шестизначных натуральных чисел посчитать сколько раз встречаются числа, в записи которых присутсвует 4 одинаковые цифры. Вот что получилось. #include <iostream> #include <math.h> using namespace std; void main (void) подробнее

Показать сообщение отдельно
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
15.03.2015, 23:04     Написать функцию swap
castaway, в c++11 заменили термин "sequence point" на отношения "sequenced before", "sequenced after". В связи с чем произошли некоторые изменения в поведении кода. В частности то, что выражение
C++
1
a[0] ^= a[1] ^= a[0] ^= a[1];
считалось до c++11 как UB, в текущем стандарте, судя по всему, таковым не является (поправьте, если я ошибаюсь).

Вырезка из Стандарта на счет оператора присваивания:
14882:2011 5.17/1
In all cases, the assignment is sequenced after the value computation of the right and left operands, and before the value computation of the assignment expression.
Косвенно это подтверждается твоим экспериментом при сборке кода в режимах C и C++11. Как с точки зрения предупреждений компилятора, так и с точки зрения результата выполнения.
У меня например такие результаты:
Bash
1
2
3
4
5
6
7
8
9
10
11
gcc -Wall main.c
main.c: In function ‘main’:
main.c:8:10: warning: operation on ‘a[0]’ may be undefined [-Wsequence-point]
     a[0] ^= a[1] ^= a[0] ^= a[1];
          ^
main.c:10:7: warning: operation on ‘i’ may be undefined [-Wsequence-point]
     i = a[i++];
       ^
./a.out
0
3
Bash
1
2
3
4
5
6
7
8
g++ -Wall main.c
main.c: In function ‘int main()’:
main.c:10:15: warning: operation on ‘i’ may be undefined [-Wsequence-point]
     i = a[i++];
               ^
./a.out
5
3
Хотя clang, что в режиме плюсов, что сей ругался только на
C++
1
i = a[i++];
и результат везде был одинаковым:
Bash
1
2
5
3
 
Текущее время: 13:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru