//test.cpp
#include <type_traits>
double* func() {}
static_assert(std::is_same<double*(*)(), decltype(func)>::value, "");
int main() {}
编译命令:
g++ -std=c++11 -c test.cpp
输出:
test4.cpp:6:1: error: static assertion failed:
static_assert(std::is_same<double*(*)(), decltype(func)>::value, "");
^
上面的代码有什么问题?我该如何解决?
答案 0 :(得分:5)
func是一个函数,您检查它是否是该函数的指针,它会失败
请参阅:
//test.cpp
#include <type_traits>
#include <iostream>
double d {};
double* func() { return &d ; }
auto ptr = func;
static_assert(std::is_same<double*(), decltype(func)>::value, "");
static_assert(std::is_same<double*(*)(), decltype(ptr)>::value, "");
static_assert(std::is_same<double*(*)(), decltype(&func)>::value, "");
double* call_func(double*(f)() )
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
return f();
}
int main() {
call_func(func); // double* call_func(double* (*)())
}
我不是函数指针专家,据我了解:
double* func() { return &d ; } // is a function
auto ptr = func; // ptr is a pointer to a function
也许您可以看到它
1; // is a int
int i = 1; // i is a Lvalue expression
该线程可能有用:Function pointer vs Function reference
还有一个更正式的链接:https://en.cppreference.com/w/cpp/language/pointer#Pointers_to_functions(感谢super)