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

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

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

代码:

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])'

最佳答案

我很确定这是不正确的。

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]) {}

它将接受正确大小的数组。

关于c++ - Visual C++ 关心函数参数中的数组大小。那是对的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37393820/

相关文章:

java - 游戏中的按钮未显示正确的消息

user-interface - MSVC 中的 FLTK 需要 x11 header 吗?

c++ - 更改 ItemData 的内容

c++ - 使用 #define 处理 if 语句错误

c++ - 在 C++ 中移动 vector 的值

foreach 循环中的 php key() 奇怪行为或获取 foreach 循环中的下一个键

c++ - 数组在方括号中增加元素是什么意思?

c++ - 如何在 C++ 中使用 fstream 读取和写入无符号字符到文件?

c++ - C++ 和 Visual C++ 有什么区别?

c++ - 小数据大数据集多重索引: space inefficient?