我有一个问题:
为什么会抛出错误(无法从 int* 转换为 int[5])
int static_Array[5];
int *dynamic_Array;
dynamic_Array = new int[5];
static_Array = dynamic_Array;
虽然这工作正常?
int static_Array[5];
int *dynamic_Array;
dynamic_Array = new int[5];
dynamic_Array = static_Array; //This line changed
我猜测类型 int 可以被编译器转换为 int* 吗? 但是为什么编译器也不能将 int 转换为 int*?
谁能提供一个实际的解释?
谢谢!
最佳答案
当在需要指针的上下文中指定原始数组时,它会转换为指向第一项的指针(在生成该指针值的意义上),这称为类型衰减。
不会发生这种情况的上下文包括 sizeof
表达式、typeid
表达式和对数组引用的绑定(bind)。
但本质上这意味着原始数组不可赋值,当然你不能将指针赋给数组变量,因为结果应该是什么。
但是,如果将数组放入struct
,则可以分配struct
。这就是 std::array
的含义。但是当你想要一个可分配的动态大小数组时,使用 std::vector
。
顺便说一句,函数也有类似的类型衰减。
关于C++ 将数组分配给彼此; type int* = type int 有效但 int = int*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22521703/