簡體   English   中英

Memcpy和const正確性

[英]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.

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