gpt4 book ai didi

c++ - 为什么在函数返回类型中不允许参数推导?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:26 26 4
gpt4 key购买 nike

最明显的答案可能是 - 因为标准是这么说的
这很好,但我正在全神贯注地理解这个选择背后的原因。

考虑以下示例:

template<typename T>
struct S { S(T) {} };

S f() { return 0; }

int main() {
auto s = f();
(void)s;
}

编译失败,错误如下:

error: use of class template 'S' requires template arguments; argument deduction not allowed in function return type

很容易修复,这不是问题,像这样的东西工作得很好:

auto f() { return S{0}; }

但是,我想了解在函数返回类型中也允许类模板参数推导的缺点是什么。
乍一看,它看起来像是一个愚蠢的限制,但我很确定我在这里遗漏了一些重要的东西。

最佳答案

这里没有任何语言法律问题:如果您指定返回类型(而不是 autoT,其中 T 是模板类型),则该返回类型必须有效。让我给你一个更简单、更好的例子:

std::vector function() {
return std::vector<int>();
}

显然它无法编译,即使没有花哨的模板,auto和类型推导,因为 std::vector不是类型,std::vector<int>是。

当您指定 S 时作为返回类型,你基本上

  • 防止编译器自己推断类型
  • 指定一个无效的返回类型,如S不是类型,S<int>是。

关于c++ - 为什么在函数返回类型中不允许参数推导?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50622302/

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