Я искал какой-то код, посланный мной другом, и он сказал: «Он компилируется, но не работает». Я видел, что он использовал функцию без скобок, что-то вроде этого:Почему компилятор C++ не жалуется, когда я использую функции без круглых скобок?
void foo(){
cout<< "Hello world\n";
}
int main(){
foo; //function without parentheses
return 0;
}
Сначала я сказал, был «использовать круглые скобки, вы должны». И затем я тестировал этот код - он компилируется, но когда он не работает (нет «Hello world»).
Итак, зачем он компилируется (никакого предупреждения от компилятора GCC 4.7), но не работает?
Это действительно работает. 'foo' обрабатывается как есть, указатель функции. Строка 'foo;' - это просто строка без эффекта. Если вы включите максимальное количество предупреждений, вы должны получить предупреждение об утверждении без каких-либо последствий. – RedX
Я вижу * "Предупреждение: инструкция является ссылкой, а не вызовом, для функции 'foo'" * и * "warning: statement does not effect" *. Вероятно, вы хотите скомпилировать с -Wall -Wextra – Flexo
(для будущих вопросов стоит добавить '#include' и любое пространство пространства имен, чтобы сделать ваш образец завершенным) –
Flexo