问题标签 [return-type-deduction]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1918 浏览

c++ - 使用“auto”的具有可变返回类型的 C++ 函数

我正在尝试编写一个根据 if 语句返回各种类型的函数。

不幸的是,我得到的是:

  1. 警告:“parseParameterValue”函数使用“auto”类型说明符,没有尾随返回类型
  2. 第二次返回时出错:'auto' 的扣除不一致:'int' 然后是 'double'

有没有办法让它工作?

提前致谢。

0 投票
0 回答
1086 浏览

c++ - 返回类型推导和函数声明

如何在使用返回类型推导的类中声明函数?

这可以:

但这不起作用:

内部编译器错误:在 gen_type_die_with_usage 中,位于 dwarf2out.c:19486

我不知道它是否与它有关,但我使用的是 QtCreator 3.3。

编辑:我正在使用 Qt 5.4 和 QtCreator 3.3。我已添加CONFIG += c++14到项目文件中。默认情况下,我使用的是 GCC 4.8.2,我想这就是我收到错误的原因(我需要4.9)。但是,当我使用 Clang 3.5(需要3.4)时,它说

错误:“自动”返回没有尾随返回类型;推导的返回类型是 C++1y 扩展

EDIT2:这似乎是 Qt 而不是 GCC 的错误。在 Qt 之外,我可以编写带有返回类型推导的类函数,它可以在 GCC 4.8.2 和 Clang 3.5.0 中正常编译和运行

0 投票
1 回答
525 浏览

c++ - 模板友元函数和返回类型推导

注意:这个问题真的很接近Return type deduction for in-class friend functions,但我没有在那里找到我的问题的答案。

用 std=c++1y 的 clang 3.4 和 std=c++14 和 std=c++1z 的 clang 3.5 测试

此代码编译:

现在,如果我在类之外定义 operator+,它将不再编译:

Clang 3.4 说:

然后指出它认为是两个不同的函数:类中的声明和类外的定义。

我的问题是:这是一个clang错误,还是只是为朋友函数推导出了模板参数,从而导致两个函数不等价?你会建议什么替代方案:让 operator+ 成为成员函数,或者在类中定义友元 operator+ (我认为这会使类接口混乱)?

仅供参考,我有一个此类代码的真实用例,我尝试包装第三方矩阵类,并且由于使用表达式模板进行延迟评估,我需要返回类型推导。

编辑:以下确实有效(但仍然使界面混乱......)

0 投票
3 回答
4395 浏览

c++ - 如果返回向量的一项,则 lambda 表达式的返回类型是什么?

考虑以下代码段:

我期待相同的结果: in f,v由 const 引用传递,所以v[i]应该有const int&类型。

但是,我得到了结果

如果我不使用 std::function,一切都很好:

输出:

因此我想知道:

  1. 在第二个片段中,lambda 表达式的返回类型是f什么?是f一样的g吗?

  2. 在第一个片段中,构造 时发生了什么std::function f导致错误?

0 投票
3 回答
1000 浏览

c++ - 可变参数模板递归返回类型推演编译错误

为什么下面的代码无法编译?

编译错误:

实现此功能的好方法是什么?

0 投票
2 回答
329 浏览

c++ - C++03中的模板函数返回类型推导

我想在 C++03 中实现以下内容:

除了我想打电话convert而不必明确指定T1. 我怎么做?

0 投票
4 回答
3385 浏览

c++ - 在 C++ 中推断模板返回类型

目前我尝试编写一个函数retrieveKeys(),它给我 a 的键std::map并将其存储在一些std::container. 该函数应以两种方式通用:

  • 接受std::mapstd::unordered_map作为参数类型。
  • 返回用户定义容器中的键,例如std::vectorstd::deque(容器必须支持push_back()方法)。

目前该功能的使用如下:

具有以下功能:

如果我不必显式地编写返回类型,那就太好了。但是当我尝试类似的东西时

使用 clang 3.6 (C++17) 编译时出现上述错误。

所以我的问题是:是否可以重写函数以便编译器可以减少返回类型?

这里又是完整的代码,便于复制:

0 投票
1 回答
328 浏览

c++ - 为什么 decltype 用于尾随返回类型?

考虑以下代码:

第二个代码有什么区别?你能举一些例子,这会有所不同还是在这里有所作为?

0 投票
1 回答
593 浏览

c++ - 通过 ENUM 查找返回元组值(不同类型)的模板函数

以下代码产生

“错误:''和'const size_t {aka const long unsigned int}'类型的无效操作数到二进制'operator<'”(gcc-4.9.1)

我只想要一个查找不同类型默认值的函数。这应该工作吗?

我错过了template某个地方吗?请参阅 我必须在哪里以及为什么要放置“模板”和“类型名称”关键字?编译错误:未解决的重载函数类型

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
编辑建议通过彼得:

改变:

并为 ID 添加了实例:

然后:

奇迹般有效。

0 投票
1 回答
51 浏览

c++14 - 如果你没有源代码,在 C++14 中键入推导

使用 C++14 中新的返回类型推导,您可以编写如下代码:

并且函数本身将使用返回值来决定函数的实际返回类型,在本例中为 a double

对于没有源代码的通用库之类的事情,这是如何完成的,而只有一个包含以下内容的头文件:

在这种情况下,编译器如何知道如果您这样做会警告您:

从你自己的代码。