在类成员的上下文中,`auto`返回类型

abr*_*ert 6 c++ class auto c++14

如何为班级成员使用自动类型扣除?例如,以下代码

struct A
{
  auto foo(); // foo is defined in another file 
};


int main()
{
  A a;
  a.foo();
}
Run Code Online (Sandbox Code Playgroud)

其中foo返回类型auto导致以下错误:

error: function 'foo' with deduced return type cannot be used before it is defined
  a.foo();
    ^
Run Code Online (Sandbox Code Playgroud)

错误是可以理解的,因为编译foo在不知道其定义的情况下无法知道返回类型是什么.

我的问题是,如果有任何变通方法或某种编程模式来规避自动返回类型不能用于类成员函数的问题,以防函数的声明和定义被分开.

Nic*_*las 12

如果要使用返回类型推导,则不能将声明和定义分成不同的文件(除非每个人都包含两者).除了使用实际类型之外,没有其他解决方法.

当C++去编译调用代码func,它必须能够知道,在那个时候,它会返回.如果没有在该翻译单元中定义,编译器就无法知道将返回什么.因此,编译器无法编译该代码.而C++的编译模型不允许它以这种方式使用来自其他翻译单元的信息.

你可能做的最好的是等待模块,这可能会解决这个问题.

不要将返回类型推断视为永远不必编写返回类型的方法.它是一种功能,适用于返回类型难以编写的情况,其中最合理的编写方式是a decltype(expr),并且expr是您要返回的确切表达式.这些情况通常都是模板代码,无论如何都必须进入标题.如果返回类型对您来说简单明了,那么就没有理由把它放在那里.默认情况下不要使用返回类型扣除.