gpt4 book ai didi

c++ - 数组上的 const_cast 给出错误

转载 作者:行者123 更新时间:2023-11-28 00:09:48 25 4
gpt4 key购买 nike

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

#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;
^

谢谢

最佳答案

to see If I can change memory location pointed by an array using const_cast

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

What this error message means ?

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

does this means I can take constness from array ...

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

... but not change it's value ?

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

I can't just do arr=&a as arr being array is const pointer

不,数组不是常量指针

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

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


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

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

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

int arr2[10];
pointer = arr2;

关于c++ - 数组上的 const_cast 给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33756270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com