下面的代碼按預期工作奇效:用的sizeof
template <typename T>
inline char* Utils::PushData(char* destination, T data)
{
memcpy(destination, &data, sizeof(data));
destination += sizeof(T);
return destination;
}
然而,當我使用這個:
template <typename T>
inline char* Utils::PushData(char* destination, T data)
{
memcpy(destination, &data, sizeof(T));
destination += sizeof(T);
return destination;
}
模型我的建築被搞砸。爲什麼會發生?當然sizeof(T)
和sizeof(data)
應該是一樣的吧?或者我誤解了sizeof
實際上獲得的大小?
編輯
我是不是真的太這個人打擾,只是覺得很奇怪。我正在使用memcpy
,因爲我需要確保我的數據充滿了填充,我也相信我的自我(唯一會使用此代碼的人,除非我決定繼續使用它)知道僅在基本類型中使用它,而且我甚至不直接調用這個函數,我會調用一個函數,以一種更有意義的方式從調用位置獲取數據。我會打電話使用這樣的模板功能...
inline char* Utils::PushXYZ(char* destination, float xValue, float yValue, float zValue)
{
destination = PushData<float>(destination, xValue);
destination = PushData<float>(destination, yValue);
return PushData<float>(destination, zValue);
}
'sizeof(T)'和'sizeof(data)'的確應該是一樣的。什麼特別讓你覺得他們不是? (你可以縮小它從「變化破壞了什麼」?) – aschepler 2010-11-01 19:38:21
目的地得到分配? – 2010-11-01 19:53:36
即使第一個代碼片段使用sizeof(T)('destination + = sizeof(T)'line)。如果我們知道哪種數據類型導致問題,回答這個問題會更容易。 – 2010-11-01 20:12:58