gpt4 book ai didi

c++ - 使用 C++11 检查函数签名是否相同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:37 24 4
gpt4 key购买 nike

//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, "");
^

上面的代码有什么问题?我该如何解决?

最佳答案

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)

关于c++ - 使用 C++11 检查函数签名是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55758250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com