【发布时间】:2020-07-05 16:53:00
【问题描述】:
我有一个名为arr 的std::vector<int> 实例,我想使用指针来处理它的长度。
我的声明
unsigned int *ptr = &arr.size();
给我一个编译错误:
cannot take the address of an rvalue of type 'size_type' (aka 'unsigned long').
即使我将指针的类型更改为size_t,此错误仍然存在。
这里有什么问题?
【问题讨论】:
-
arr.size()返回size_t(即unsigned long long)。 -
如果您不知道要放置什么数据类型,只需使用
auto。 -
你不能取它的地址。是函数返回值。没有对象可以获取地址。只有指令可以创建一个对象(它是一个纯右值)。您可以将大小存储到一个变量中(实际上是创建一个对象)并获取它的地址,但是当向量的大小发生变化时这不会更新,并且对它的更改不会影响向量。
-
@RohanBari 在这种情况下,“size_t”是“unsigned long”,而不是“unsigned long long”。错误消息是这样说的。
-
请比“使用它的长度”更具体。并阅读XY problem。