复制构造函数中的初始化列表,它接受std :: array

时间:2013-11-24 05:41:16

标签: c++ intellisense visual-studio-2013

#include <array>
#include <algorithm>

template<typename Type, unsigned int ArraySize>
class Vector
{
public:
    std::array<Type, ArraySize> arr;
    Vector(){ std::fill(arr.begin(), arr.end(), 0); }
    Vector(const std::array<Type, ArraySize>& input) : arr(input){}
};

#include <iostream>

int main()
{
    Vector<double, 4> a2{{1, 2, 3, 4}}; 
    std::cout << a2.arr[0];
    std::cout << a2.arr[1];
    std::cout << a2.arr[2];
    std::cout << a2.arr[3];
}

此代码在Visual Studio 2013中在调试和发布模式下符合要求,但IntelliSense在编译时会出现此错误:

  

智能感知:没有构造函数的实例“CHL :: Vector :: Vector [with Type = double,ArraySize = 4U]”匹配   参数列表               参数类型是:({...})

我的问题是这是C ++中的有效代码吗?如果是这样,我怎么能阻止IntelliSense用这个错误污染我的错误列表。

1 个答案:

答案 0 :(得分:2)

Intellisense期待三对括号:

class Vector {
    Vector( //1 for initialization of vector
        std::array<...> //1 for initialization and 1 for internal array
    );
};

然而,该语言允许括号省略,这意味着只有两个会做。我不确定为什么编译器会捕获这个而Intellisense没有,但是如果你使用CTP,它可能就像上次编译器更改在Intellisense中没有反映到实际版本之前一样。