gpt4 book ai didi

c++ - 在扣除 auto 之前使用 decltype(auto)

转载 作者:行者123 更新时间:2023-11-30 03:21:41 25 4
gpt4 key购买 nike

<分区>

以下情况:

#include <stdint.h>

class C
{
public:
C()=default;
~C()=default;
template<uint8_t> struct integconst
{
};

int m1(integconst<8>);
int m2(integconst<8>);
decltype(auto) masterMethod(int opMode);
private:
};

int C::m1(integconst<8>) {return 1;}
int C::m2(integconst<8>) {return 2;}

decltype(auto) C::masterMethod(int opMode)
{
switch(opMode)
{
case 1:
return m1(integconst<sizeof(uintptr_t)>{}); break;
case 2:
return m2(integconst<sizeof(uintptr_t)>{}); break;
default:
return m1(integconst<sizeof(uintptr_t)>{}); break;
}
}

int main()
{
C obj;
int bla=obj.masterMethod(1);
return 0;
}

将上面的简化示例放在一起没有问题。但是当我尝试在单独的文件(full example here)中分离实现和声明时,我得到了错误

main.cpp:错误:在扣除“auto”之前使用了“decltype(auto) C::masterMethod(int)”。将实现直接移动到类本身可以解决问题(或在同一文件中实现方法),但我真的不明白为什么?有人能解释一下为什么编译器还不知道 decltype(auto) 的类型吗,特别是编译器什么时候开始解析“auto”的返回类型?如何按照我的意愿将实现和声明分开?

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