问题标签 [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.

0 投票
1 回答
362 浏览

c++ - 可变参数模板的声明点

可变参数模板在什么时候被认为是“声明的”?这在 clang++ 3.4 下编译,但不在 g++ 4.8.2 下编译。

显然 g++ 不会匹配尾随返回类型中的函数本身。g++ 4.8.2 的错误是:

附录:如果我删除可变参数模板的声明,clang++ 和 g++ 都会出错。

补充2:我看到之前已经问过类似的问题。我想这里真正的问题是为什么它适用于一个编译器而不是另一个。此外,我可以通过使用 sum() 的非原始参数在 POI 处强制 ADL 使其与 g++ 一起使用。

附录 3:这适用于 clang++ 和 g++:

0 投票
2 回答
9767 浏览

c++ - 你可以在模板参数中使用 decltype 吗?

我正在尝试重载一个乘法运算符,但不想输入多个重载函数以考虑乘以 int 和 float、int 和 double、float 和 int 等...我希望编写一个重载运算符来解释与浮点数、整数和双精度数相乘的所有组合,并获得正确的返回类型。我收到错误消息,说没有找到采用“Widget::Widget”类型的右手操作数的运算符(或者没有可接受的转换)。我认为这是因为我使用 decltype 来设置返回对象 Widget 的模板类型。如果返回不是模板对象,则使用尾随返回类型有效。

这是我尝试制作的重载运算符的示例:

这是模板类的示例

示例 Main.cpp

0 投票
2 回答
378 浏览

c++ - 尾随返回类型中的占位符是否覆盖初始占位符?

g++ 似乎接受autodecltype(auto)作为初始和尾随返回类型的任何组合:

但是,clang 拒绝jandk说:错误:具有尾随返回类型的函数必须指定返回类型“auto”,而不是“decltype(auto)”演示)。

哪个编译器是正确的?在每种情况下应使用哪个规则(auto或)?在trailing-return-typedecltype(auto)中使用占位符类型是否有意义?

0 投票
1 回答
445 浏览

c++ - 是否可以忽略 c++11 的尾随返回类型特性而支持 c++14 的函数返回类型推导特性?

当我跳过表达式的返回类型时

C++11中的以下代码:

等于C++14中的以下代码:

但另外可以在C++14decltype中推导出没有规则的返回类型:

当我知道返回类型到底是什么时

C++11中的以下代码:

等于C++03中的以下代码:

一个不应该发生的奇怪例子

C++11中的以下代码:

等于C++14中的以下代码:

请纠正我,如果上面的代码是错误的并且不能按预期工作。

编辑根据评论(Yakk):它们并不真正相等,第一个(C++11示例)是隐式转换,而第二个(static_castC ++14示例)是显式转换。

结论

如您所见,我可以在不使用C++11的替代函数语法特性的情况下完成所有操作。我对么?我可以完全忘记它而不会遇到任何技术问题吗?

一般来说,可以避免以下语法:

赞成以下语法:

我是否忘记了 C++11 的尾随返回类型特性的任何使用,而 C++14 的函数返回类型推导特性是不可能的?

0 投票
2 回答
381 浏览

c++ - 尾随返回类型函数语法中的 auto 关键字背后是否有意图?

在 C++11 中,这两行是等价的。据我所知,第二种语法的优点是返回类型在类范围内。因此,您可以直接使用类的嵌套类型和decltype非静态成员的表达式。此外,函数名称排列得很好。

这里auto使用了关键字,也可以用来自动推导局部变量的类型。但是,我看不到这里的类比。在函数声明语法中,没有派生任何内容。返回类型在箭头后面明确提到。

就个人而言,我会说如果没有auto关键字,语法会更清晰。这背后有什么意图吗?哪个?

0 投票
2 回答
548 浏览

c++ - c++11涉及类成员时如何使用自动返回和decltype?

例如

以上得到编译错误,因为 m_count indecltype无法识别。如何解决它?必须使用autoreturn 和 get 类型 from 。m_count

更改顺序时编译代码

但我如何让第一个案例工作?

0 投票
1 回答
347 浏览

c++ - auto myFunc() -> int 和 int myFunc() 的区别或好处

在查看了一些关于 C++14 的在线文档后,我发现以下语法用于在 C++14 中定义使用尾随返回类型的函数:

我的问题是,除了使用这种方式在参数和其他一些场景中使用 decltype 之外,将上述语法用于沼泽标准函数是否有区别或任何好处,例如:

0 投票
3 回答
560 浏览

c++11 - c++11 typedef 函数指针,带有尾随返回类型

我一直在尝试清理继承的代码库。它广泛使用包含尾随返回类型的模板函数。它还包括许多指向非模板化、非成员函数的函数指针。在清理过程中,我发现在 Visual Studio 2013 下等效于以下工作的代码:

这个 typedef 在 C++11 标准中有效吗?

虽然我个人避免像瘟疫一样使用#defines(尤其是在用于创建像这些“函数”这样的新语言特性时),但鉴于项目中尾随返回类型的普遍存在,团队认为这将使代码库的可读性显着提高。

0 投票
1 回答
145 浏览

c++ - 我需要一些关于规范中 §8/5 的帮助

§8/5:

trailing-return-type中的可选属性说明符 序列属于指示的返回类型。trailing-return-type中 的type-id包括可能最长的abstract-declarator序列。[注意:这解决了数组和函数声明符的模糊绑定。[ 例子:

—结束示例] —结束说明]

尾随返回类型中的类型 ID ”对我来说没有意义,仅仅是因为根据语法,尾随返回类型不包含类型 ID 。

我也不明白数组和函数声明的“模糊绑定”。据我所知

0 投票
1 回答
224 浏览

c++ - 名称查找问题,GCC 和 clang 不同意

正如 ecatmur 所指出的,这个问题在这里已经有了答案。

这个问题显然不是使用带有可变参数模板函数的 decltype 的尾随返回类型的重复。它实际上试图提出一个更简单的解决方案来解决该线程中的问题。问题是这个解决方案根据标准是否正确,因为 GCC 和 clang 不同意。仔细阅读这个问题,你就会意识到这一点。

这个问题是受这个启发的。我试图提出一个比已经提供的更简单的解决方案,并最终得到这个:

虽然此解决方案适用于 GCC,但它根本无法解决 clang 的问题。所以,我想知道哪个是正确的。