static bool wheel_scrolled_up(SDL_Event event);
Почему этот boolean может запуститься без SDL_Event event
, когда должен только с SDL_Event event
?
Пример:
#include <AceEngine/AceEngine.hpp>
#include <iostream>
using namespace std;
SDL_Event event;
int main()
{
if (ACE::mouse::wheel_scrolled_up/* (SDL_Event event) */)
cout << "Wheel scrolled up!" << endl;
}
Этот код не выдаёт при компиляций никаких ощибок, когда он должен выдовать!
По настоящему должно быть так:
#include <AceEngine/AceEngine.hpp>
#include <iostream>
using namespace std;
SDL_Event event;
int main()
{
if (ACE::mouse::wheel_scrolled_up(event))
cout << "Wheel scrolled up!" << endl;
}
Я не знаю это баг или нет, но так не должно быть!
Как сделать так чтобы без SDL_Event event
компилятор выдовал ощибку?
Этот код формально валиден и не должен генерировать ошибку. Имя ACE::mouse::wheel_scrolled_up
без скобочек может рассматриваться как указатель на функцию и внутри if
преобразуется в bool
. Хотя такая запись валидна, она не не имеет большого смысла, так как результат такого преобразования известен на этапе компиляции, что делает if
фактически бессмысленным. Во многих компиляторах есть соотв. предупреждение на такой случай (warning C4551
, -Wpointer-bool-conversion
), которое имеет смысл включить и (опционально) перевести в категорию ошибок.
void foo(int) {}
int main()
{
if (foo) // error: address of function 'foo' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
{
return 1;
}
return 0;
}
https://godbolt.org/z/Pv44dW
ACE::mouse::wheel_scrolled_up
- это не вызов, а по сути адрес функции, каковой явно не nullptr
, а значит, вы написали if (true) ...
(при приведении адреса в bool
).
Вызов всегда требует наличия скобок! То, что вы считаете "вызовом без event
", имело бы вид
ACE::mouse::wheel_scrolled_up()
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
С двумерным массивом, состоящим из n вещественных элементов, выполнить следующее: преобразовать массив, удалив из него одинаковые элементыОсвободившиеся...
Есть структура, которая хранит чимсло из 2 бит, все верно же?
При попытке получения свойств слоёв валидации и расширений в вектора типа VkLayerProperties и VkExtensionProperties, функции VkEnumerateInstanceLayerProperties и VkEnumerateInstanceExtensionProperties...
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском