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

Ark*_*kun 2 c++ arrays cuda visual-c++

当我尝试编译由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) {}
Run Code Online (Sandbox Code Playgroud)

输出:

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])'
Run Code Online (Sandbox Code Playgroud)

Mar*_*ica 8

我很确定这不正确.

int foo(const int []);
int foo(const int [4]);
int foo(const int *);
Run Code Online (Sandbox Code Playgroud)

应该都宣布相同的功能.话虽如此,你可能想要的是:

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

template<int Size>
MyClass<Size> ::MyClass(const int (&data)[Size]) {}
Run Code Online (Sandbox Code Playgroud)

这将接受尺寸合适的数组.