2010-10-04 4 views
8

В чем разница между следующими двумя декларациями:неоднозначные заявления

1. int foo(int); 
2. int foo(int()); 

Я не уверен, если оба заявления эквивалентны. Что делает (2) отличным от (1)?

+2

Отъезд HTTP: //cdecl.org ... это будет полезно ... – liaK

ответ

13

int foo(int); является объявление функции принимает целое число в качестве аргумента и возвращает целое число, а

int foo(int()); объявляет функцию не берет в качестве аргумента «указатель на функцию, возвращающую int и принимая {никаких аргументов [в C++] и неопределенное количество аргументов [в C]} "и возвращает целое число.

(2) эквивалентно int foo(int (*pf)()) и int foo(int f())

+1

не принимая никаких аргументов? Я считаю, вы подразумеваете принятие неопределенных, но не вариативных аргументов. '(void)' - это способ указать «без аргументов». –

+2

@R Я верю, что это только C, а не C++ – Tom

+0

@R: Извините, я пропустил это. Добавлено в мой пост. –

Смежные вопросы