Visual C ++关注函数参数中的数组大小。那是对的吗?

时间:2016-05-23 14:33:07

标签: c++ arrays visual-c++ cuda

当我尝试编译由CUDA的cudafe ++工具生成的以下(损坏)代码时,Visual Studio会抛出错误C2244。这是正确的行为吗?海湾合作委员会似乎并不关心签名不匹配。

代码:

template<int Size>
class MyClass {
public:
    MyClass(const int data[Size]);
};

template<int Size>
MyClass<Size> ::MyClass(const int data[]) {}

void func(MyClass<4> input) {}

输出:

test2.cpp(9) : error C2244: 'MyClass<Size>::MyClass' : unable to match function definition to an existing declaration
    test2.cpp(5) : see declaration of 'MyClass<Size>::MyClass'
    definition
    'MyClass<Size>::MyClass(const int [])'
    existing declarations
    'MyClass<Size>::MyClass(const int [Size])'

1 个答案:

答案 0 :(得分:8)

我很确定这不正确。

int foo(const int []);
int foo(const int [4]);
int foo(const int *);

应该都声明相同的功能。话虽如此,你可能想要的是:

template<int Size>
class MyClass {
public:
    MyClass(const int (&data)[Size]);
};

template<int Size>
MyClass<Size> ::MyClass(const int (&data)[Size]) {}

接受正确大小的数组。