为什么vector<int * const>是非法/不合逻辑的?
Why is vector<int * const> illegal/illogical?
我是C++ :)新手我只是想创建一个指向非常量整数的常量指针向量。因此,我想,我将有一个指针向量,我可能不会更改其地址。
我写道:
std::vector<int * const> pointers;
但无法编译它(使用 GCC)。
我收到 5 个错误,从:"初始化'无效运算符删除(void*)'的参数 1"和"从'常量无效*'到'无效*'的转换无效"
为什么这是非法的(或不合逻辑的),它与无效指针有什么关系?
简而言之,vector
需要其模板参数来支持一些基本操作,其中之一就是项目分配。
vector
有几个需要分配给其项目的操作。例如,每当vector
空间不足并需要重新调整大小时,它都会分配一个新的内存块,然后将其信息复制到新块。如果项目类型为 const
,则无法分配给新的内存块。
无论如何,将参数声明为const
并没有多大意义。你试图得到什么行为?
我认为错误的简洁理由如下:向量是一种可变的数据结构,因此您可以更改向量的内容(例如通过使用push_back
或erase
)。当您实例化矢量模板时,您实例化的代码将尝试覆盖矢量的内容,这是您的int *const
声明所禁止的。
如果你想要一个不能变异的向量,那么你可以使用对向量的常量引用,或者创建一个 const 向量并按值传递它。
相关文章:
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- C++选择排序算法中的逻辑错误
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 逻辑运算符上出现错误代码 a')'
- 无法在问题解决方案中执行输出逻辑
- 我的逻辑反转字符串中的元音有什么问题?
- 如果语句逻辑不正确
- 我可以使用任何好的逻辑来阻止计算机将 O 放在井字游戏中的现有 X 上
- C++中的移动分配出现问题.非法指令: 4.
- CIN是逻辑1还是0?
- 尝试创建表会给出 SQL 逻辑错误
- 显示使用函数、switch 语句和多维数组的程序的多个不合逻辑的错误
- 未定义的行为:数组元素的值隐式/不合逻辑地更改
- 为什么vector<int * const>是非法/不合逻辑的?
- C++ 不合逻辑 >= 处理 vector.size() 时的比较很可能是由于size_type是无符号的
- Python,C++,C#,F#中的不合逻辑的不等式
- 我的程序不合逻辑的结果
- 数字猜谜游戏与不合逻辑的错误