[英]Memcpy and const correctness
在我的代碼上使用cppcheck時,表明可以將函數設為const。 Cppcheck似乎是正確的,但是我發現代碼中的memcpy很奇怪。
代碼摘錄:
if ( (offset + size) <= _bufferSize )
{
char* _destPtr = (char*)_buffer + offset;
memcpy(_destPtr, data, size);
result = true;
}
據我了解,memcpy將間接寫入_buffer,因此該函數不是const。 但是,即使直接使用_buffer,編譯器仍然可以正確編譯代碼。
為什么編譯器在這里不生成錯誤?
const
可在兩個不同的地方與指針一起使用。
const char * x; // (1) data pointed by x is const
char * const x; // (2) x itself is const
使對象成為const
會使指針類型的成員成為第二種意義上的const
,而從第一種意義上來說則不會。 當前對象( *this
)被const
在一個const
成員函數。
如果您還需要將指向的數據也變成const
,則可以將指針包裝const
深度傳播的自定義類中:
template <class T> class deep_const_ptr {
// .... ctors, operator*, the usual stuff
T* get() { return data; }
const T* get() const { return data; }
private:
T* data;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.