C: MSDN говорит, что «указатели по умолчанию могут быть предоставлены для указателей на функции», но так ли это?

Рассматривать этот Статья MSDN («Аргументы по умолчанию») и следующий код:

#include <stdio.h>

void print(int x) {
printf("%d\n", x + 537);
}

typedef void (*Func)(int x = 0);

int main() {
Func f = print;
f();
return 0;
}

В статье утверждается, что «Аргументы по умолчанию могут быть отменены для указателей на функции. Например: int (*pShowIntVal)( int i = 0 );«. Как я понял, это означает, что приведенный выше код должен успешно скомпилироваться. Однако это не так:

a.cpp
a.cpp(7) : error C2383: 'Func' : default-arguments are not allowed on this symbol
a.cpp(11) : error C2198: 'Func' : too few arguments for call

Похоже, я неправильно понял статью. Какой смысл, какова правильная интерпретация?

5

Решение

Аргумент по умолчанию является частью функции декларация но это не часть его тип. Таким образом, вы можете написать:

void f(int x = 0);

но тип е по-прежнему

void(int x)

И, следовательно, указатель на тип функции не может содержать аргументы по умолчанию.

(Ссылка: § 8.3.6 / 9 [dcl.fct.default]: «Аргумент по умолчанию не является частью типа функции.»)

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector