最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ xxx_cast實(shí)現(xiàn)轉(zhuǎn)換代碼實(shí)例解析

 更新時(shí)間:2020年07月24日 09:45:02   作者:Cucucu  
這篇文章主要介紹了C++xxx_cast轉(zhuǎn)換代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1.1 static_cast

  static_cast可以在一個(gè)方向上實(shí)現(xiàn)隱式轉(zhuǎn)換,在另一個(gè)方向上實(shí)現(xiàn)靜態(tài)轉(zhuǎn)換。其適用于單隱和雙隱兩種情況。

雙隱

    雙隱即兩邊都可以直接進(jìn)行隱式轉(zhuǎn)換,適用于一般類型的數(shù)據(jù)轉(zhuǎn)換(如int, float, double, long等數(shù)據(jù)類型之間的轉(zhuǎn)換)

單隱

    單隱即只能在一個(gè)方向上進(jìn)行隱式轉(zhuǎn)換,在另一個(gè)方向上只能實(shí)現(xiàn)靜態(tài)轉(zhuǎn)換。(如void* 和指針之間的轉(zhuǎn)換,任意類型的指針可以轉(zhuǎn)換為void*,但是void*不能轉(zhuǎn)換為任意類型的指針,因此將void*轉(zhuǎn)換為任意類型的指針時(shí)就需要調(diào)用靜態(tài)轉(zhuǎn)換)

//首先要驗(yàn)證的是static_cast,其可以實(shí)現(xiàn)在一個(gè)方向上做隱式轉(zhuǎn)換,另一個(gè)方向上做靜態(tài)轉(zhuǎn)換,可以適用于單隱和雙隱兩種情況

  //首先是雙隱,也就是兩邊都能直接進(jìn)行隱式轉(zhuǎn)換,一般適用于基本數(shù)據(jù)類型,如
  int a = 4;
  double b = 3.2;
  a = b;
  b = a;
  cout << a << endl;
  cout << b << endl;
  a = static_cast<int> (b);
  b = static_cast<double> (a);

  //然后是單隱,也就是說(shuō),只能從一遍到另一邊進(jìn)行隱式轉(zhuǎn)換
  //任意類型的指針可以轉(zhuǎn)換為void*,但是void*不能轉(zhuǎn)換為任意類型的指針
  void* p = &b;
  int* q = &a;
  p = q;
  q = static_cast<int*>(p);

1.2 reinterpret_cast

  reinterpret_cast“通常為操作數(shù)的位模式提供較底層的重新解釋”-->也就是說(shuō)將數(shù)據(jù)以二進(jìn)制的形式重新解釋,在雙方向上都不可以隱式類型轉(zhuǎn)換的,則需要重新類型轉(zhuǎn)換??梢詫?shí)現(xiàn)雙不隱的情況,如int轉(zhuǎn)指針,指針轉(zhuǎn)int等。

//雙不隱
  int *m=&a;
  int n=4;
  m = reinterpret_cast<int*>(n);
  n = reinterpret_cast<int>(m);

1.3 const_cast

  Const_cast可用來(lái)移除非const對(duì)象的引用或指針的常量性。其可以將const變量轉(zhuǎn)換為非const變量。其可以用于去除指針和引用的const,const_cast是對(duì)const的語(yǔ)義補(bǔ)充。其目標(biāo)類型只能是引用或指針。

  非const對(duì)象 --> const引用或指針 --> 脫const --> 修改非const對(duì)象

//const_cast-->用于去除非const對(duì)象的const,用于指針和引用
  /************ 第一種情況,去引用的const化 ************/
  int aa;
  const int& ra = aa;
  aa = 100;
  cout << aa << endl;
  cout << ra << endl;
  //ra = 200;//這樣是錯(cuò)誤的,因?yàn)閞a是const,要實(shí)現(xiàn)ra的修改,必須去const化
  const_cast<int&> (ra) = 300;
  cout << aa << endl;
  cout << ra << endl;

  /************ 第二種情況,去指針的const化 ************/
  const int* pp = &a;
  //*p = 200;//這樣是錯(cuò)誤的,因?yàn)橹羔榩是const類型,要實(shí)現(xiàn)p的修改,必須去const化
  *const_cast<int*>(pp) = 500;
  cout << *pp << endl;

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

郯城县| 凤山县| 固镇县| 株洲县| 青田县| 科技| 天等县| 沂源县| 婺源县| 泌阳县| 吉水县| 桦南县| 灌南县| 锦屏县| 宝鸡市| 沅陵县| 佛坪县| 泸定县| 蒙城县| 家居| 延安市| 若羌县| 海阳市| 左贡县| 阿坝县| 红桥区| 井冈山市| 遂溪县| 浮山县| 白城市| 和平县| 中卫市| 敦化市| 尼木县| 嘉祥县| 客服| 文化| 达尔| 墨脱县| 札达县| 德安县|