因此,虽然接受 array that has decayed to a pointer 是常见/典型的像下面这样
#include <iostream>
void example(int* data)
{
std::cout << data[0] << ' ' << data[1] << ' ' << data[2] << std::endl;
}
int main()
{
int data[3] = {1, 2, 3};
example(data);
}
我注意到你似乎也可以做相反的事情。也就是说,您可以将一个指针传递给数组,该指针将不衰减(?)#include <iostream>
void example(int data[3])
{
std::cout << data[0] << ' ' << data[1] << ' ' << data[2] << std::endl;
}
int main()
{
int data[3] = {1, 2, 3};
example(data);
example(nullptr); // Is this legal? Can I prevent this?
}
请注意 data
example
的论据已更改为 int*
至 int[3]
但我还是能通过nullptr
.将参数更改为 std::array<int, 3>
显然会阻止这种情况,但我很好奇标准是否描述了这种隐式转换?有很多关于“数组到指针”隐式转换的评论,但这似乎是相反的。
最佳答案
实际上,
void example(int data[3])
是void example(int data[])
或者void example(int* data)
你需要void example(/*const*/ int (&data)[3])
有数组引用,(因此拒绝不同大小的指针或数组)。
关于c++ - 防止指针作为数组传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68745573/