![](/img/trans.png)
[英]c++: How do I safely cast a const double** to a const void**
[英]C++ memcpy: double incompatible with const void
我有一個私人會員
vector<double>m_data_content_joinfeatures;
和一個結構:
struct udtJoinFeatures
{
double Values[16];
};
我現在想將一些值從m_data_content_joinfeatures復制到udtJoinFeatures的結構中,如下所示:
void clsMapping::FeedJoinFeaturesFromMap(udtJoinFeatures &uJoinFeatures)
{
unsigned int iByteStartPos=1024; //where the data starts that I want to copy
unsigned int iByteCount=128; //the number of bytes that I want to copy
memcpy(&uJoinFeatures.Values[0], m_data_content_joinfeatures[iByteStartPos],iByteCount);
}
但是編譯器告訴我“ double與void *類型的參數不兼容”。
有人可以幫忙嗎? 我不想使用for-next-statement復制我的值。 我想盡可能使用MemCpy,因為我認為這是最快的方法。
謝謝!
memcpy
的第二個參數必須是一個地址:
&m_data_content_joinfeatures[iByteStartPos]
另外,名稱iByteStartPos
似乎暗示向量中的字節偏移量。 您編寫的代碼(一旦固定為包括&
)將從向量中的iByteStartPos
double開始復制。 如果您確實想要字節偏移量,則需要將數據開頭轉換為const char *
並使用指針算法計算地址:
memcpy(&uJoinFeatures.Values[0],
reinterpret_cast<const char*>(m_data_content_joinfeatures.data()) + iByteStartPos,
iByteCount);
但是,一旦您的代碼開始看起來像這樣,最好重新考慮您的策略並放棄基於memcpy
和基於字節的索引,而用更安全的高級API(例如std::copy
代替它們。
使用С++ 11,您可以
memcpy(&uJoinFeatures.Values[0], m_data_content_joinfeatures.data() + iByteStartPos, iByteCount);
甚至更短
memcpy(uJoinFeatures.Values, m_data_content_joinfeatures.data() + iByteStartPos, iByteCount);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.