C++, эквивалентность не существующего элемента массива и 0

72
07 октября 2021, 12:40
#include <iostream>
#include <typeinfo>
using namespace std;
template <typename type_1, typename type_2>
bool equal(type_1 const &x, type_2 const &y) {
    return (x == y) && (typeid(x) == typeid(y));
}
int main() {
    int a[10] = {5};
    cout << equal(a[9], 0);
    return 0;
}

Подскажите, пожалуйста, почему несуществующий элемент массива равно 0-ю? Я знаю, что false == 0, но нет ли ни одного способа их различить, чтоб вышеуказанный код вернул false? Спасибо!

READ ALSO
Почему .h-файл не видит импортируемые в него типы данных?

Почему .h-файл не видит импортируемые в него типы данных?

Естьh-файл, с таким исходным кодом:

166
Почему std::swap определен в нескольких файлах?

Почему std::swap определен в нескольких файлах?

Почему алгоритм std::swap() определен в 2 заголовочных файлах: <algorithm> и <utility>?

108
Двойной вызов конструктора с std::initializer_list

Двойной вызов конструктора с std::initializer_list

Почему следующая программа

201
Объявление std::forward

Объявление std::forward

Почему std::forward объявлён так?

221