Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 自动返回类型推断警告:当返回定义类型时,为什么需要decltype?_C++_C++11_C++14 - Fatal编程技术网

C++ 自动返回类型推断警告:当返回定义类型时,为什么需要decltype?

C++ 自动返回类型推断警告:当返回定义类型时,为什么需要decltype?,c++,c++11,c++14,C++,C++11,C++14,这是一个关于elementsSize()成员函数如何处理自动返回类型推断的问题: #include <iostream> #include <vector> template<typename Element> class ElementVector { std::vector<Element> elementVec_; // Other attributes. public: ElementV

这是一个关于elementsSize()成员函数如何处理自动返回类型推断的问题:

#include <iostream>
#include <vector>

template<typename Element>
class ElementVector
{
    std::vector<Element> elementVec_;  

    // Other attributes.

    public: 

        ElementVector() = default; 

        ElementVector(const std::initializer_list<Element>& list)
            :
                elementVec_(list)
        {}

        auto elementsSize() // -> decltype(elementVec_size()) 
        {
            return elementVec_.size(); 
        }
};

using namespace std;

int main(int argc, const char *argv[])
{
    ElementVector<double> e = {1.2, 1.3, 1.4, 1.5};  

    cout << e.elementsSize() << endl;

    return 0;
}
我读过关于自动返回类型扣除的选项,该选项在不使用decltype的情况下成为可能

写注释掉的
decltype
对我来说似乎有点奇怪。我做错了什么


注意:我知道如果“其他属性”中没有向量,我可以从std::vector继承,这正是我实际问题中的情况

我做错了什么

没什么。GCC4.8实现了自动推断的返回类型,但默认情况下作为C++1y特性启用。使用
-std=c++1y
编译将删除该警告


[答案转换自。]

“我知道我可以继承自
std::vector
”——这可能是一个非常糟糕的主意。你回答了自己的问题,必须编写decltype很奇怪,所以C++14正在更改它。我不确定你到底在问什么-你似乎回答了自己的问题。目前,该语言需要一个返回类型,因为对于普通函数(仅针对lambdas),返回类型推导没有进入C++11;因此,您需要给出一个(使用
decltype
或其他方法)。如果您有一个支持演绎的编译器(正如您所说,它应该在今年晚些时候成为标准),您可以省略它。@tomislav maric:尾部返回类型可以基于函数参数类型,例如
auto add(T1 a,t2b)->decltype(a+b)
。领先的返回类型不能。@SplinterOfChaos:你不应该通过写评论来回答问题。你应该通过写答案来回答问题。
main.cpp:20:27: warning: ‘elementsSize’ function uses ‘auto’ type specifier without trailing return type [enabled by default]
         auto elementsSize() // -> decltype(elementVec_size())