在维基百科的
尽管我理解了这个函数背后的动机,但我并不理解它使用的语法,尤其是声明中的
编辑1:
基于上述内容:这里有什么问题?
错误信息如下:
decltype
文章中http://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
回答 EDIT 1:
糟糕!我忘记在 g++ 中使用 -std=c++11
编译选项。
EDIT 2:
根据下面的答案,我有一个相关的问题:请看下面的声明:
template <typename T1, typename T2>
decltype(*(T1 *) nullptr + *(T2 *) nullptr) sum2(T1 v1, T2 v2);
在函数声明中使用decltype
,无需使用->
。那么我们为什么需要->
呢?