欧美日韩不卡一区二区三区,www.蜜臀.com,高清国产一区二区三区四区五区,欧美日韩三级视频,欧美性综合,精品国产91久久久久久,99a精品视频在线观看

C語言

C++中const-cast與reinterpret-cast運算符的用

時間:2025-03-25 21:02:51 C語言 我要投稿
  • 相關(guān)推薦

C++中const-cast與reinterpret-cast運算符的用法

  C++中const_cast與reinterpret_cast運算符的用法,經(jīng)常被用于表達(dá)式中的類型轉(zhuǎn)換,下面是小編分享的運算符的用法,一起來看一下吧。

  const_cast 運算符

  從類中移除 const、volatile 和 __unaligned 特性。

  語法

  const_cast <

  type-id

  > (

  expression

  )

  備注

  指向任何對象類型的指針或指向數(shù)據(jù)成員的指針可顯式轉(zhuǎn)換為完全相同的類型(const、volatile 和 __unaligned 限定符除外)。對于指針和引用,結(jié)果將引用原始對象。對于指向數(shù)據(jù)成員的指針,結(jié)果將引用與指向數(shù)據(jù)成員的原始(未強制轉(zhuǎn)換)的指針相同的成員。根據(jù)引用對象的類型,通過生成的指針、引用或指向數(shù)據(jù)成員的指針的寫入操作可能產(chǎn)生未定義的行為。

  您不能使用 const_cast 運算符直接重寫常量變量的常量狀態(tài)。

  const_cast 運算符將 null 指針值轉(zhuǎn)換為目標(biāo)類型的 null 指針值。

  // expre_const_cast_Operator.cpp

  // compile with: /EHsc

  #include <iostream>

  using namespace std;

  class CCTest {

  public:

  void setNumber( int );

  void printNumber() const;

  private:

  int number;

  };

  void CCTest::setNumber( int num ) { number = num; }

  void CCTest::printNumber() const {

  cout << " Before: " << number;

  const_cast< CCTest * >( this )->number--;

  cout << " After: " << number;

  }

  int main() {

  CCTest X;

  X.setNumber( 8 );

  X.printNumber();

  }

  在包含 const_cast 的行中,this 指針的數(shù)據(jù)類型為 const CCTest *。 const_cast 運算符會將 this 指針的數(shù)據(jù)類型更改為 CCTest *,以允許修改成員 number。強制轉(zhuǎn)換僅對其所在的語句中的其余部分持續(xù)。

  reinterpret_cast 運算符

  允許將任何指針轉(zhuǎn)換為任何其他指針類型。也允許將任何整數(shù)類型轉(zhuǎn)換為任何指針類型以及反向轉(zhuǎn)換。

  語法

  reinterpret_cast < type-id > ( expression )

  備注

  濫用 reinterpret_cast 運算符可能很容易帶來風(fēng)險。除非所需轉(zhuǎn)換本身是低級別的,否則應(yīng)使用其他強制轉(zhuǎn)換運算符之一。

  reinterpret_cast 運算符可用于 char* 到 int* 或 One_class* 到 Unrelated_class* 之類的轉(zhuǎn)換,這本身并不安全。

  reinterpret_cast 的結(jié)果不能安全地用于除強制轉(zhuǎn)換回其原始類型以外的任何用途。在最好的情況下,其他用途也是不可移植的。

  reinterpret_cast 運算符不能丟掉 const、volatile 或 __unaligned 特性。有關(guān)移除這些特性的詳細(xì)信息,請參閱 const_cast Operator。

  reinterpret_cast 運算符將 null 指針值轉(zhuǎn)換為目標(biāo)類型的 null 指針值。

  reinterpret_cast 的一個實際用途是在哈希函數(shù)中,即,通過讓兩個不同的值幾乎不以相同的索引結(jié)尾的方式將值映射到索引。

  #include <iostream>

  using namespace std;

  // Returns a hash code based on an address

  unsigned short Hash( void *p ) {

  unsigned int val = reinterpret_cast<unsigned int>( p );

  return ( unsigned short )( val ^ (val >> 16));

  }

  using namespace std;

  int main() {

  int a[20];

  for ( int i = 0; i < 20; i++ )

  cout << Hash( a + i ) << endl;

  }

  Output:

  64641

  64645

  64889

  64893

  64881

  64885

  64873

  64877

  64865

  64869

  64857

  64861

  64849

  64853

  64841

  64845

  64833

  64837

  64825

  64829

  reinterpret_cast 允許將指針視為整數(shù)類型。結(jié)果隨后將按位移位并與自身進行“異或”運算以生成唯一的索引(具有唯一性的概率非常高)。該索引隨后被標(biāo)準(zhǔn) C 樣式強制轉(zhuǎn)換截斷為函數(shù)的返回類型。


【C++中const-cast與reinterpret-cast運算符的用】相關(guān)文章:

c++運算符重載基礎(chǔ)知識詳解08-20

二級C++考點歸納:運算符重載08-27

Java中運算符的使用10-17

java中運算符的使用方法09-16

計算機二級C++重載雙目運算符概述09-20

c++ 中--declspec 的用法詳解08-13

C++中內(nèi)聯(lián)函數(shù)的應(yīng)用09-21

C++類中的繼承實例詳解07-05

C++中輸入多組數(shù)據(jù)的方法09-24