问题标签 [trailing-return-type]
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++ - 尾随返回类型的名称查找和类型简化规则是什么?
尾随返回类型允许在这两种情况下简化代码:
从类的成员函数之一返回类内部定义的类型:
/li>返回一个复杂的类型,比如函数指针类型:
/li>
我试图找到标准的相关部分来解释上述两个简化是如何工作的。我已经查看[basic.lookup]
并搜索了trailing-return
,但找不到任何直接解释上述转换如何工作的内容。
我错过了吗?
标准的哪些部分解释了上述尾随返回类型的简化?
c++ - c++ 11 带有 decltype 的尾随返回类型不能按预期工作
为什么这“按预期”工作?我的理解是这不应该工作:
我尝试了其他一些组合,例如:
这样它不会编译错误实际上第二个组合失败了
这是预期的。我的理解是,第一个函数也应该失败并出现同样的错误,但它工作正常。
c++11 - 不正确的尾随返回类型
我已经有一个可以在 C++ 14 上正常工作的代码,但现在我需要将我的编译器设置设置为 C++ 11。
所以,我做了以下更改
添加了尾随返回类型 bool .. 但我收到错误之类的错误:无法将 '{anonymous}::LookupPredicate(const string&)::' 转换为 'bool' 作为回报 知道什么必须是尾随类型
c++11 - C++11:在尾随返回类型中正确扩展模板参数包
我试图在我的 C++11 程序中使用switch
语句将运行时常量转换为编译时常量。我有enum SomeEnum {A, B, C};
,根据它的值我想调用模板函数f<A>()
,f<B>()
或者f<C>()
。我的代码中有很多依赖于SomeEnum
(以及其他模板参数)的模板函数,所以我决定制作专用dispatch
函数。这是我要编译的代码:
(函数返回类型取决于模板参数的情况我不需要处理)
编译该行时出现错误dispatch<TemplateFunctor1>(B, 0);
,其中仅需要一个模板参数TemplateFunctor1
。错误消息如下:
error: no matching function for call to 'dispatch(SomeEnum, int)'
note: candidate: template<template<SomeEnum <anonymous>, class ...> class FUNCTOR, class ... OTHERS, class ... ARGS> decltype (FUNCTOR<(SomeEnum)0u, OTHERS ...>::function((forward<ARGS>)(dispatch::args)...)) dispatch(SomeEnum, ARGS&& ...)
note: template argument deduction/substitution failed
error: wrong number of template arguments (2, should be 1)
在这部分代码FUNCTOR<A, OTHERS...>
中:尾随返回类型。
所以我尝试将FUNCTOR<A, OTHERS...>
尾随返回类型更改为FUNCTOR<A>
,然后dispatch<TemplateFunctor2, int>(B, 0);
无法编译该行。它说我提供了错误数量的模板参数(1,应该是 2),这是一个相当预期的错误。
我在这里不明白的是为什么相同的decltype()
构造在default
switch 分支中有效,但在尾随返回类型中无效?
我可以通过将标准更改为 C++14 并完全删除尾随返回类型来修复我的代码,但是我不明白这里发生了什么。
我还尝试了不同的编译器(ICC、GCC、Clang),它们都给出了类似的错误消息,所以这里不可能是编译器错误。
c++ - 函数声明中箭头语法的优点
使用有什么好处
超过
在模板实例化期间它不是编译成适当的类型吗?
c++ - 如何建立使用模板函数的 lambda 函数的尾随返回类型?
如何在以下使用模板函数的代码片段中进行尾随返回类型推导?代码和现在一样运行良好,但我需要知道是否还可以为 lambda 函数添加尾随返回。
c++ - 非模板函数中的尾随返回类型
我见过人们使用以下语法来实现功能:
代替:
我都了解,而且我知道尾随返回类型语法对于使用 decltype 的模板代码很有用。就我个人而言,我会避免使用其他代码的语法,因为在阅读代码时,我更喜欢首先阅读函数的具体返回类型,而不是最后。
如上所示,对非模板代码使用尾随返回类型语法有什么好处(个人偏好或风格除外)?
c++ - 用于在尾随返回类型中别名模板化结构变量的 Visual C++ 错误 (?)
我有一些在 Clang 上编译但被 Visual C++ 拒绝的代码。我设法将其分解为以下示例:
似乎最后一行中的尾随返回类型应该是引用Struct::BoolValue
,而不是 ::BoolValue
。它适用于 Clang,但被 Visual C++ 2019(最新版本)拒绝:
我怀疑这是一个编译器错误,但我想先检查一下:这段代码有效吗?
c++ - Koenig 查找的尾随返回类型和回退
大多数情况下,简单成员函数的 C++17 推断返回类型可以轻松转换为 C++11 尾随返回类型。
例如,成员函数在
变成
考虑到using namespace
在类主体内的顶级范围内不允许这样做,您如何为以下内容编写尾随返回类型?
(例如,在调用std::swap
, std::begin
,时使用带有回退的参数相关查找非常常见std::end
)