问题标签 [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.
c++ - 使用“auto”的具有可变返回类型的 C++ 函数
我正在尝试编写一个根据 if 语句返回各种类型的函数。
不幸的是,我得到的是:
- 警告:“parseParameterValue”函数使用“auto”类型说明符,没有尾随返回类型
- 第二次返回时出错:'auto' 的扣除不一致:'int' 然后是 'double'
有没有办法让它工作?
提前致谢。
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 中正常编译和运行
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+ (我认为这会使类接口混乱)?
仅供参考,我有一个此类代码的真实用例,我尝试包装第三方矩阵类,并且由于使用表达式模板进行延迟评估,我需要返回类型推导。
编辑:以下确实有效(但仍然使界面混乱......)
c++ - 如果返回向量的一项,则 lambda 表达式的返回类型是什么?
考虑以下代码段:
我期待相同的结果: in f
,v
由 const 引用传递,所以v[i]
应该有const int&
类型。
但是,我得到了结果
如果我不使用 std::function,一切都很好:
输出:
因此我想知道:
在第二个片段中,lambda 表达式的返回类型是
f
什么?是f
一样的g
吗?在第一个片段中,构造 时发生了什么
std::function f
导致错误?
c++ - 可变参数模板递归返回类型推演编译错误
为什么下面的代码无法编译?
编译错误:
实现此功能的好方法是什么?
c++ - C++03中的模板函数返回类型推导
我想在 C++03 中实现以下内容:
除了我想打电话convert
而不必明确指定T1
. 我怎么做?
c++ - 在 C++ 中推断模板返回类型
目前我尝试编写一个函数retrieveKeys()
,它给我 a 的键std::map
并将其存储在一些std::container
. 该函数应以两种方式通用:
- 接受
std::map
并std::unordered_map
作为参数类型。 - 返回用户定义容器中的键,例如
std::vector
或std::deque
(容器必须支持push_back()
方法)。
目前该功能的使用如下:
具有以下功能:
如果我不必显式地编写返回类型,那就太好了。但是当我尝试类似的东西时
使用 clang 3.6 (C++17) 编译时出现上述错误。
所以我的问题是:是否可以重写函数以便编译器可以减少返回类型?
这里又是完整的代码,便于复制:
c++ - 为什么 decltype 用于尾随返回类型?
考虑以下代码:
第二个代码有什么区别?你能举一些例子,这会有所不同还是在这里有所作为?
c++ - 通过 ENUM 查找返回元组值(不同类型)的模板函数
以下代码产生
“错误:''和'const size_t {aka const long unsigned int}'类型的无效操作数到二进制'operator<'”(gcc-4.9.1)
我只想要一个查找不同类型默认值的函数。这应该工作吗?
我错过了template
某个地方吗?请参阅
我必须在哪里以及为什么要放置“模板”和“类型名称”关键字?
或
编译错误:未解决的重载函数类型
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
编辑建议通过彼得:
改变:
并为 ID 添加了实例:
然后:
奇迹般有效。
c++14 - 如果你没有源代码,在 C++14 中键入推导
使用 C++14 中新的返回类型推导,您可以编写如下代码:
并且函数本身将使用返回值来决定函数的实际返回类型,在本例中为 a double
。
对于没有源代码的通用库之类的事情,这是如何完成的,而只有一个包含以下内容的头文件:
在这种情况下,编译器如何知道如果您这样做会警告您:
从你自己的代码。