【发布时间】:2013-05-04 16:59:34
【问题描述】:
在decltypehttp://en.wikipedia.org/wiki/Decltype 上的维基百科文章中,我遇到了这个例子:
int& foo(int& i);
float foo(float& f);
template <class T> auto transparent_forwarder(T& t) −> decltype(foo(t)) {
return foo(t);
}
虽然我理解了这个函数背后的动机,但我不理解它使用的语法,特别是声明中的->。什么是 -> 以及它是如何解释的?
编辑 1
基于上述:这里有什么问题?
template <typename T1, typename T2>
auto sum(T1 v1, T2 v2) -> decltype(v1 + v2) {
return v1 + v2;
}
错误是:
error: expected type-specifier before ‘decltype’
error: expected initializer before ‘decltype
编辑 1 的答案:
哎呀!我忘了在 g++ 中使用-std=c++11 编译器选项。
编辑 2
基于以下答案。我有一个相关的问题:看看下面的声明:
template <typename T1, typename T2>
decltype(*(T1 *) nullptr + *(T2 *) nullptr) sum2(T1 v1, T2 v2);
它使用decltype,而不需要在函数声明中使用->。那么为什么我们需要->
【问题讨论】:
-
致所有投票结束此问题的人。这个问题与我编辑后的链接问题不同。再看看吧。
-
@footy:如果您有新问题,请提出新问题。 SO 是一个问答网站,而不是一个话题讨论网站。