asker160 发表于 2017-04-17 09:59

[结贴]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)?
谢谢。

lxyscls 发表于 2017-04-17 13:57

好像是从c++14开始不decltype的,具体可以参考下《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》

bruceteen 发表于 2017-04-17 14:12

http://stackoverflow.com/questions/24109737/what-are-some-uses-of-decltypeauto

windoze 发表于 2017-04-17 14:44

简单说auto肯定是value type,但decltype(auto)可以是ref type。
页: [1]
查看完整版本: [结贴]C++14函数返回值,写成decltype(auto)和写成auto,区别在哪里?