gpt4 book ai didi

c++ - `auto` 类成员上下文中的返回类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:50 25 4
gpt4 key购买 nike

如何对类成员使用自动类型推导?比如下面的代码

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/

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