Я попытался это и есть выход, как: пустотыМожет ли typeid() использоваться для передачи функции?
Пожалуйста, объясните следующий код:
#include <cstdio>
#include <typeinfo>
using namespace std ;
void foo()
{ }
int main(void)
{
printf("%s",
typeid(foo()).name());// Please notice this line, is it same as typeid().name() ?
return 0;
}
AFAIK: Оператор TypeId позволяет типа объекта, который определяется во время выполнения.
Итак, этот пример кода сообщает нам, что функция, которая возвращает void, имеет тип ** void **. Я имею в виду, что функция является методом и не имеет типа. Верный?
+1 просто чтобы добавить немного ясности в уже правильный ответ, выражение 'typeid (foo())' сначала вызывает функцию 'foo()', а затем делает ' typeid' на возвращаемое значение 'foo()' '', которое является 'void' –
@John Dibling: Это не совсем точно. Функция называется * not *. 'typeid' оценивает свое выражение только тогда, когда имеет тип полиморфного класса. Во всех остальных случаях (включая этот) он похож на 'sizeof', что означает, что выражение аргумента * не * оценивается. – AnT
А, хорошо. –