[结贴]C++14函数返回值,写成decltype(auto)和写成auto,区别在哪里?
本帖最后由 asker160 于 2017-04-17 17:59 编辑我写了一个很简单的程序如下:
template<class T1,class T2>
decltype(auto) Add(T1&& t1,T2&& t2)
{
return t1+t2
}
int main(){
int i=Add(1,2);
return 0;
}
用clang编译clang++ -std=c++14,没有问题。我发现也可以简写为"auto",去掉decltype关键字:
template<class T1,class T2>
auto Add(T1&& t1,T2&& t2)
{
return t1+t2;
}
int main(){
int i=Add(1,2);
return 0;
}
编译也没有问题。所以我想知道"decltype(auto)"和"auto"这两种写法,对于函数返回值而言,到底什么时候有区别,什么时候必须要用到decltype(auto)?
谢谢。
好像是从c++14开始不decltype的,具体可以参考下《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》 http://stackoverflow.com/questions/24109737/what-are-some-uses-of-decltypeauto 简单说auto肯定是value type,但decltype(auto)可以是ref type。
页:
[1]