数组上的const_cast给出错误

const_cast on array giving error

本文关键字:出错 错误 cast const 数组      更新时间:2023-10-16

我刚刚写了一个试用程序,看看我是否可以使用const_cast更改数组指向的内存位置。我知道数组常量指针,但只是想看看它是否被允许,我在下面写了程序

#include <iostream>
using namespace std;
    int main() {
        // your code goes here
        int arr[10], a ;  
        (const_cast<int*>(arr)) = &a;
        return 0;
    }             

我收到以下错误消息。这个错误消息是什么意思?这是否意味着我可以从数组中获取常量,但不能更改它的值?

prog.cpp: In function 'int main()':
prog.cpp:8:26: error: lvalue required as left operand of assignment
  (const_cast<int*>(arr)) = &a;
                          ^

感谢

查看是否可以使用const_cast 更改数组指向的内存位置

数组不指向任何东西。它们是一系列对象。

这个错误消息是什么意思?

将表达式强制转换为非引用类型的值类别为prvalue。只能将左值用作赋值运算符的左手操作数。因此,不能将强制转换表达式用作赋值中的左手操作数。

这是否意味着我可以从数组中获取常量。。。

数组首先不是const,因此使用const_cast来移除常量是没有意义的。

但不能改变它的价值?

您可以更改非常量数组中对象的值,但不能将数组分配给另一个数组,即使它们是非常量数组。也不能将指针分配给数组变量。

我不能只做arr=&作为arr的数组是常量指针

不,数组不是常量指针

正如我前面指出的,您不能这样做,因为您不能将指针分配给数组变量。

当前您正在尝试将int[10]的类型更改为int*。它们是不相关的类型。const_cast只能用于改变常量或波动性。它不能用于更改类型。


如果你想指向一个内存位置,那么你需要一个指针。要创建指针变量,不能简单地强制转换数组。下面是一个如何定义指针并初始化它以指向数组的第一个元素的示例:

int arr[10];
int* pointer = arr;

这就是你如何改变指针指向的内存位置:

int arr2[10];
pointer = arr2;

否,不能"更改数组指向的内存位置"。

这是因为在您的问题中,"数组"不是一个值可以更改的离散变量。数组的名称是实际数组中第一个元素的别名。它不是一个可以更改其值的实际物理变量。它只是一个不可变的标签,引用某个长度的连续元素数组。

考虑一下:

int a;
&a;

本质上,你所要求的是,你可以改变&a指向的内容。你不能,&a指向,嗯,a,你无法改变这一点。

相关文章: