簡體   English   中英

從空的std :: vector獲取原始數據指針

[英]Get raw data pointer from empty std::vector

這是一個未定義的行為:

std::vector<int> v;
int const * a = &v[0];

我的目標是避免UB和vector::data()函數起作用。 但是我需要在沒有>=C++11

例如,如果我要用vector::reserve分配一些內存,那行得通嗎?

v.reserve(1);
int const * a = &v[0];

澄清:

我將指針指向該點后,向量不會更改,並且向量可能為空或包含數據。

只需在條件運算符中執行檢查即可:

int const * a = v.empty() ? NULL : &v[0];

data() ,它具有更多的好處,您可以從指針本身檢查向量是否為空:如果為空,則a為null。

向量不為其元素的指針提供任何保證。 使用您所做的保留是非常危險的,因為稍后您可能會在某些元素上push_back() ,這可能會使指針無效。

如果您想要一個更好的故事,請考慮一下,即使迭代器也可能因push_back擦除而失效……為什么指針仍然仍然有效?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM