gpt4 book ai didi

c++ - 为什么不能在类范围内推导我的类静态自动函数的类型?

转载 作者:可可西里 更新时间:2023-11-01 15:51:50 26 4
gpt4 key购买 nike

我正在尝试获取 auto 函数的返回类型。 This works :

auto foo(int bar)
{
return 0;
}

typedef std::result_of<decltype(foo)> foo_t;

太好了,接下来是下一步:获取类作用域中 static auto 函数的返回类型。 This also works :

struct Foo
{
static auto foo(int bar)
{
return 0;
}
};

typedef std::result_of<decltype(Foo::foo)> foo_t;

但是this doesn't work :

struct Foo
{
static auto foo(int bar)
{
return 0;
}

typedef std::result_of<decltype(Foo::foo)> foo_t;
};

GCC 说“错误:在推导‘auto’之前使用‘static auto Foo::foo(int)’”,Clang 说“在定义之前不能使用具有推导返回类型的函数‘foo’”。为什么?

最佳答案

虽然您编写代码的方式使之成为可能,但只有在类完全定义后才能处理 foo() 的类内定义。就好像你这样写:

struct Foo
{
static auto foo(int bar);

typedef std::result_of<decltype(Foo::foo)> foo_t;
};

auto Foo::foo(int bar)
{
return 0;
}

foo() 的定义允许使用 class Foo 中定义的类型,包括 foo_t,这将是循环的。因此,class Foo 的定义不允许使用其成员函数的定义——只能使用它们的声明。

换句话说,您假设代码从上到下进行了全面评估。它不是。

关于c++ - 为什么不能在类范围内推导我的类静态自动函数的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41842987/

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