Я решил скомпилировать и запустить этот кусок кода (из любопытства), и компилятор G ++ успешно скомпилировал программу.Я ожидал увидеть ошибку компиляции или ошибки времени выполнения, или, по крайней мере, значения a и b поменялись местами (как 5> 1), так как функция std::sort()
вызывается с двумя указателями на целые числа.(Обратите внимание, что я знаю, что это не очень хорошая практика, и я просто играл с указателями)
#include <iostream>
#include <algorithm>
int main() {
int a{5};
int b{4};
int c{1};
int* aptr = &a;
int* bptr = &b;
std::sort(aptr, bptr);
std::cout << a << ' ' << b << ' ' << c << '\n';
return 0;
}
Однако после выполнения программы я получил следующий вывод:
5 4 1
Мой вопрос: как C ++ разрешил этот вызов функции std::sort()
?И как не получилось на самом деле отсортировать все между адресами памяти a и b (потенциально включая даже значения мусора в памяти)?
Я имею в виду, если мы попробовали это с массивами в стиле C, как это (std::sort(arr, arr+n)
) он успешно отсортировал бы массив в стиле C, потому что arr
и arr+n
в основном просто указатели, где n
- это размер массива, а arr
- указатель на первый элемент.
(извините, если этот вопрос звучит глупо. Я все еще изучаю C ++.)