问题标签 [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++ - 尾随返回类型中 decltype 的原因
我正在阅读有关“新” C++ 功能的文本,并遇到了decltype及其用法。我了解decltype在尾随返回类型中的原因,例如
没有它,编译器将无法派生模板函数的返回类型。但是为什么语法是这样的呢?
为什么不使用类似的东西
感觉更“自然”,因为返回类型是在通常的位置声明的,尽管是两个参数的结果。这是否与其他东西发生冲突,或者如果语法是这种不值得的方式,它是否会给编译器带来额外的工作?
c++ - 这个尾随返回类型声明的目的是什么?
我试图理解 cppreference 提供的示例std::visit
。这是该链接中的示例:
我对overloaded
声明特别感兴趣:
其中第一个是有道理的——结构overloaded
是用它封装的每种类型的构造函数声明的。但是我不明白第二个的目的。这似乎是一个类似于以下的函数声明:
但是函数从来没有定义过,那么后面的例子怎么用呢?如果这只是一个构造函数,那么为什么它不需要overloaded::
前缀,主体在哪里?我想我只是误解了尾随返回类型声明“扩展”的内容,因此任何对声明完成的内容的见解overloaded(Ts...)
都会受到赞赏。
c++ - 尾随返回类型和返回类型扣除之间的冲突
我正在编写一些函数的返回类型相当复杂的代码。我想使用auto
for 从返回类型推导,但这在前向声明中显然是不可能的。所以我希望至少只复制 return 语句的内容并执行以下操作,
这会在 GCC 7 中产生以下错误,
我当然可以重复
return
在定义中(有效),但是当返回类型已经由语句唯一给出时,我为什么需要这样做?我的定义中的类型f
最终如何比 更加模棱两可int f()
?
c++ - 尾随返回类型供参考
考虑以下代码。
使用 C++11 编译时,出现以下错误。
等效代码(注释函数)工作正常。但我想使用尾随返回类型。
.htaccess - 当根的一部分是文件夹时,将所有带有尾随的页面重定向到不带尾随的 URL
我已经尝试了在键入它们时重定向我的页面的所有代码,并在其后缀为根 URL,但它仅适用于不是文件夹的 URL,即对于链接 /mylink.html 我有文件夹“mylink”,在它里面我放我的文章,所以我尝试访问该文章,它表现良好,但是每当我单击与包含子页面的文件同名的文件夹时,它就会破解为 401 或 500 错误!
先感谢您!
这是我的代码:
c++ - clang 是否有权根据其重载之一拒绝具有尾随 decltype 返回类型的模板调用?
令我惊讶的是,clang 无法编译以下 c++11 代码:
更准确地说,clang 3.7.1 抱怨模板实例化链很长,表现得好像auto downcast(A<T>& a) -> /*...*/
withT=int
的实例化需要自身的实例化。clang 5.0.0 或 6.0.0 只会崩溃(!)。gcc 和 msvc 都接受。
现在,clang-5.0.0 崩溃显然是一个错误,但 clang-3.7.1 错误是有道理的,所以…… 该代码首先是合法的吗?
让我强调一下,我问的是这段代码是否合法,而不是解决方法(一个简单的解决方法是拆分overload
and overload
,overload_const
让后者只处理 const 引用,让前者调用后者)。
我可以在clang和gcc之间找到以下一些相关的争论点(使用带有可变参数模板函数的decltype的尾随返回类型,SO链接)以及这个类似的问题,其答案引用了标准(gcc可以编译可变参数模板而clang不能)
但是,我不确定此处是否适用完全相同的参数(因为downcast
应该引用先前声明的重载,而不是尾随返回类型中的本身)。
c++ - C++11 中的类型转发
以下情况:
因为SomeFunc()
我尝试过类似的东西
auto SomeFunc() ->decltype(&CTest::SomeFunc_Helper(std::integral_constant<int, 8>))
给我std::integral_constant<int, 8>
无法解决的错误。所以我的问题是如何进行从一个函数到另一个函数的类型转发?(欢迎使用不包括命名空间的 C++11 解决方案std::
)
templates - 使用带有 lambda 表达式和尾随返回类型的模板函数的 mingw-w64 编译器错误
在使用 mingw-w64 在 Ubuntu 16.04 for Windows 下交叉编译程序时,我遇到了这个错误。
考虑这个最小的示例程序 test.cc:
使用 g++ 编译(版本 5.4.0)
工作正常,但是 mingw(版本 5.3.1)
产生错误信息
在上述示例函数中省略模板时,编译成功。
为什么 mingw 会为此表达式产生编译器错误?有没有办法重新制定表达式以避免此错误?
c++ - 私有方法作为尾随返回类型(decltype)
当我尝试decltype()
在私有方法函数上使用时,我收到私有方法的错误error: 'm1' has not been declared in this scope
现在我的问题是,为什么编译器不在类的私有部分中查找,因为删除尾随返回类型或将私有部分放在顶部masterMethod
可以解决问题(decltype(auto)
[如果允许 C++14] 也可以正确的自动返回类型扣除)。
decltype(m1())
此外,删除whenm1()
并具有相同的返回类型是否是不好的行为m2()
,因为这也对我有用?
c++ - lambda 尾随返回类型 auto 的用途是什么?
加-> auto
进去有什么用[]() -> auto { return 4; }
?
对我来说 - 它与[]() { return 4; }