av手机免费在线观看,国产女人在线视频,国产xxxx免费,捆绑调教一二三区,97影院最新理论片,色之久久综合,国产精品日韩欧美一区二区三区

C語言

C++中const-cast與reinterpret-cast運(yùn)算符的用

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

C++中const-cast與reinterpret-cast運(yùn)算符的用法

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

  const_cast 運(yùn)算符

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

  語法

  const_cast <

  type-id

  > (

  expression

  )

  備注

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

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

  const_cast 運(yùn)算符將 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 運(yùn)算符會(huì)將 this 指針的數(shù)據(jù)類型更改為 CCTest *,以允許修改成員 number。強(qiáng)制轉(zhuǎn)換僅對(duì)其所在的語句中的其余部分持續(xù)。

  reinterpret_cast 運(yùn)算符

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

  語法

  reinterpret_cast < type-id > ( expression )

  備注

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

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

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

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

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

  reinterpret_cast 的一個(gè)實(shí)際用途是在哈希函數(shù)中,即,通過讓兩個(gè)不同的值幾乎不以相同的索引結(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é)果隨后將按位移位并與自身進(jìn)行“異或”運(yùn)算以生成唯一的索引(具有唯一性的概率非常高)。該索引隨后被標(biāo)準(zhǔn) C 樣式強(qiáng)制轉(zhuǎn)換截?cái)酁楹瘮?shù)的返回類型。


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

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

二級(jí)C++考點(diǎn)歸納:運(yùn)算符重載08-27

Java中運(yùn)算符的使用10-17

java中運(yùn)算符的使用方法09-16

計(jì)算機(jī)二級(jí)C++重載雙目運(yùn)算符概述09-20

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

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

C++類中的繼承實(shí)例詳解07-05

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