如何对类成员使用自动类型推导?比如下面的代码
struct A
{
auto foo(); // foo is defined in another file
};
int main()
{
A a;
a.foo();
}
其中 foo
的返回类型为 auto
会导致以下错误:
error: function 'foo' with deduced return type cannot be used before it is defined
a.foo();
^
错误是可以理解的,因为编译无法在不知道其定义的情况下知道 foo
的返回类型是什么。
我的问题是,如果函数的声明和定义分离,是否有任何变通方法或某种编程模式可以规避自动返回类型不能用于类成员函数的问题。
最佳答案
如果你想使用返回类型推导,你不能将声明和定义分开到不同的文件中(除非每个人都包括两者)。除了使用实际类型外,没有其他解决方法。
当 C++ 开始编译调用 func
的代码时,它必须能够知道,那时,它将返回什么。如果在该翻译单元中没有定义,编译器将无法知道将返回什么。因此,编译器无法编译该代码。而C++的编译模型不允许它以这种方式使用来自其他翻译单元的信息。
您可能能做的最好的事情就是等待模块,这可能会解决这个问题。
不要将返回类型推导视为一种永远不必编写返回类型的方法。这是一个针对返回类型难以编写的情况的功能,其中最合理的编写方式是 decltype(expr)
,而 expr
是准确的你要回来的表情。这些情况通常在模板代码中,无论如何都必须进入标题。如果返回类型对您来说简单明了,就没有理由不将它放在那里。默认情况下不使用返回类型推导。
关于c++ - `auto` 类成员上下文中的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40694607/