C++ 記憶體::const_pointer_cast



C++ Memory::const_pointer_cast 這種型別的轉換會改變指標指向的物件的一致性,無論是設定它還是移除它。例如,可以將 const 指標傳遞給需要非 const 引數的函式。

Const_cast 方法用於向變數新增或移除 const,它是從變數中移除 const 的合法方式。Const_cast 將空指標值轉換為目標型別的空指標值。

語法

以下是 C++ Memory::const_pointer_cast 的語法:

shared_ptr<T> const_pointer_cast (const shared_ptr<U>& sp) noexcept;

引數

sp - 這是一個共享指標。

示例 1

讓我們來看下面的例子,我們將執行 cast_pointer_casting 並獲取輸出。

#include <iostream>
#include <memory>
int main (){
   std::shared_ptr<int> x;
   std::shared_ptr<const int> y;
   x = std::make_shared<int>(12);
   y = std::const_pointer_cast<const int>(x);
   std::cout << "*Result: " << *y << '\n';
   *x = 23;
   std::cout << "*Result: " << *y << '\n';
   return 0;
}

輸出

讓我們編譯並執行上面的程式,這將產生以下結果:

*Result: 12
*Result: 23

示例 2

以下是另一個示例,我們將使用 const_cast 並獲取輸出。

#include <iostream>
using namespace std;
void print (char * str){
   cout << str << '\n';
}
int main (){
   const char * c = "Hello World";
   print ( const_cast<char *> (c) );
   return 0;
}

輸出

執行以上程式碼後,將顯示如下輸出:

Hello World

示例 3

考慮另一種情況,我們將使用 const_cast 並獲取輸出。

#include <iostream>
using namespace std;
class A{
   public:
      void setNumber( int );
      void printNumber() const;
   private:
      int number;
};
void A::setNumber( int num ){
   number = num;
}
void A::printNumber() const{
   cout << "\nBefore: " << number;
   const_cast< A * >( this )->number--;
   cout << "\nAfter: " << number;
}
int main(){
   A X;
   X.setNumber( 10 );
   X.printNumber();
}

輸出

程式碼執行後,將生成如下輸出:

Before: 10
After: 9
廣告