#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用这个错误污染我的错误列表。
答案 0 :(得分:2)
Intellisense期待三对括号:
class Vector {
Vector( //1 for initialization of vector
std::array<...> //1 for initialization and 1 for internal array
);
};
然而,该语言允许括号省略,这意味着只有两个会做。我不确定为什么编译器会捕获这个而Intellisense没有,但是如果你使用CTP,它可能就像上次编译器更改在Intellisense中没有反映到实际版本之前一样。