数组上的const_cast给出错误
const_cast on array giving error
我刚刚写了一个试用程序,看看我是否可以使用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
,你无法改变这一点。
- 分段错误当我试图运行程序时出错
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 创建 OpenCV 非自由版本 v4.3 时出错,可折叠.cpp错误 C2039、2605
- 制作时出错,C++"db.c:2127:错误:在"||"标记之前应使用";"
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- 在VS2015中访问类成员时运行时错误,但在Linux上未访问时出错
- 如何更改路径以修复错误"./main:加载共享库 libmkl_core.so 时出错?
- 为什么在定义类之前声明类的对象会在友元类中给出错误,而在友元函数中不会出错
- 安装 mply 库时出错.致命错误:gsl/gsl_sf.h:没有这样的文件或目录
- Rcpp/C++/R:比较日期时间矢量与日期时间时出错(错误:"运算符>"的不明确重载)
- 编译特征程序时出错:错误:'seq'不是'Eigen'的成员
- 可能的 GCC 链接器错误会导致将弱符号和局部符号链接在一起时出错
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 运算符重载时出错(错误:"运算符<<不匹配(操作数类型为"std::basic_ostream<char>"和"const char [2]")
- 编译类 C++ 中的线程时出错(错误 xthread)
- 加载GLEW库时出错(错误LNK2001)
- 通过函数指针调用函数时出错(错误C2064)
- 编译core.obj时出错:错误LNK2001:未解析的外部符号_harmony_core_init
- 链接c++静态库与android ndk时出错(错误:无法识别文件格式)
- 使用GCC编译游戏时出错.(错误:将"Screen"的含义从"class Screen&q