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
广告