PigUnit с Hadoop 2.x

TL; DR

Правила в C и C ++ одинаковы, между ними нет никакой разницы.


Что означает C ++ Standard ( n3797 ) say?

5.2.2p1 Вызов функции [expr.call]

Вызов функции - это постфиксное выражение, за которым следуют скобки, содержащие возможные пустые, разделенный запятыми список инициализатор-предложений, которые составляют аргументы функции.

Постфиксное выражение должно иметь тип функции или указатель на тип функции.

blockquote> blockquote>

Что означает стандарт C ( n1570 )?

6.3.2.1p4 Lvalues, массивы и указатели функций

Обозначение функции - это выражение, которое имеет тип функции. За исключением случаев, когда он является операндом оператора sizeof, оператор _Alignof или унарный оператор &, обозначение функции с функцией типа «возвращение функции » преобразуется в выражение, которое имеет тип "указатель на функцию, возвращающую тип ".

blockquote> blockquote>

6.5.2.2p1 Функциональные вызовы

Выражение, которое обозначает вызываемую функцию, должно иметь указатель на функцию, возвращающую функцию void или возвращающий полный тип объекта, отличный от типа массива.

blockquote> blockquote>

Заключение?

Как правило выражается, различаются между C ++ и C. В C неизменное преобразование function-to-pointer всегда применяется при вызове функции , тогда как в C ++ указано, что выражение postfix " может быть либо указателем, либо переменной типа функции.

Однако; ваш вопрос заключается в том, что два способа вызова функции через указатель различаются между C ++ и C, и ответ таков: нет, нет разницы между (1), (2) и (3), и нет никакой разницы между два языка.

(*fptr)(123);   // (1)

fptr(123);      // (2)

(***fptr)(123); // (3)

Примечание: имейте в виду, что нет разницы между (*fptr) (...) и fptr (...), когда дело доходит до вызова функции, но что они могут быть значительно разными в других контекстах.

0
задан llovett 25 February 2015 в 03:41
поделиться