Не должна ли в этом случае попытка использовать необъявленную переменную привести к ошибке компиляции?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Не должна ли в этом случае попытка использовать необъявленную переменную привести к ошибке компиляции?

Сообщение Anonymous »

Я давно не писал C++ и хотел попрактиковаться в шахматной игре, чтобы вернуться к ней.
Я написал следующий класс, который отслеживает координаты шахматных фигур на доске
и проверяет правильность координат. Значение для любой координаты (x, y) x и y должно находиться в диапазоне [0, 7].
Вот реализация класса координат:

Код: Выделить всё

inline bool valid_coord(const int x, const int y)
{
if (x < 0 || x > game_settings::square_count.first) return false;
if (y < 0 || y > game_settings::square_count.first) return false;
return true;
}

class Board_coord
{
public:
Board_coord(const int x, const int y)
{
if (!valid_coord(x, y))
{
BOOST_THROW_EXCEPTION(std::invalid_argument(
std::format("({},{}) is not a valid coordinate", x, y)));
}

x_coord = x;
y_coord = y;
}

int get_x() const noexcept { return x_coord; }
int get_y() const noexcept { return y_coord; }

bool operator==(const Board_coord& other) const
{
return (x_coord == other.x_coord && y_coord == other.y_coord);
}

friend Board_coord operator+(const Board_coord& lhs, const Board_coord& rhs);

private:
int x_coord;
int y_coord;

};

Board_coord operator+(const Board_coord& lhs, const Board_coord& rhs)
{
return Board_coord{ lhs.get_x() + rhs.get_x(), lhs.get_y() + rhs.get_y() };
}
Пытаясь протестировать код, я случайно написал следующее:

Код: Выделить всё

Board_coord p0{ 4, 3 };
Board_coord p1{ 3, 2 };
Board_coord p2{ p0 + p2 };
Что меня удивило, так это то, что я смог использовать p2 еще до того, как он был объявлен. Я вообще не получил предупреждений компилятора (используя msvc 19.41.34123 для x64 с установленным флагом /W4). Результат был:

Добавьте функцию __cdecl game_logic::Board_coord::Board_coord(const
int,const int) Тип динамического исключения: struct boost ::wrapException std::Exception::what: (-858993456,-858993457)
не является допустимым координата

Если я не совсем что-то упустил из виду: не должна ли в этом случае компиляция завершиться неудачно при попытке использовать необъявленную переменную?

Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-a-comp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»