在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++之類型轉換函數詳解

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-24 15:31 ? 次閱讀

一、轉換構造函數的學習:

1、回憶數據類型轉換:

在平時寫代碼的時候,最怕的就是那種隱式數據類型轉換了,一不小心,軟件就bug不斷;而顯示數據類型(一般是程序自己去強制類型轉換,這個是我們能夠明顯的識別和掌控的)。為此我們這里總結了一副隱式類型轉換的圖:

下面我們來幾個隱式轉換的例子:

代碼版本一:

#include <iostream>
#include <string>
int main()

short s ='a';
unsigned int ui = 100;
int i = -200;
double d = i;
std::cout<<"d =" << d <<std::endl;
std::cout<<"ui= "<<ui<<std::endl;
if((ui+i)>0)

std::cout<<"Postive"<<std::endl;

else

std::cout<<"Negative"<<std::endl;

return 0;

輸出結果:

root@txp-virtual-machine:/home/txp# ./a.out
d =-200
ui= 100
Postive

注解:這里我們明顯發現(-200+100)還是大于0,這顯然不符合正常人的思維了;所以我們仔細分析一下,發現這里肯定是進行了隱式轉換了,為此我們再加一條語句看看(ui+i)的值到底是多少:

代碼版本二:

#include <iostream>
#include <string>
int main()

short s ='a';
unsigned int ui = 100;
int i = -200;
double d = i;
std::cout<<"d =" << d <<std::endl;
std::cout<<"ui= "<<ui<<std::endl;
if((ui+i)>0)

std::cout<<"(ui+i) = "<<ui+i<<std::endl;
std::cout<<"Postive"<<std::endl;

else

std::cout<<"Negative"<<std::endl;

return 0;

輸出結果:

root@txp-virtual-machine:/home/txp# ./a.out
d =-200
ui= 100
(ui+i) = 4294967196
Postive

注解:通過打印(ui+i)的值我們發現,i原本是int數據類型,這里隱式轉換成無符號的數據類型了

為了讓大家更加理解隱式的轉換,我們下面再來一個例子:

代碼版本三:

#include <iostream>
#include <string>
int main()

short s ='a';
unsigned int ui = 100;
int i = -200;
double d = i;
std::cout<<"d =" << d <<std::endl;
std::cout<<"ui= "<<ui<<std::endl;
if((ui+i)>0)

std::cout<<"(ui+i) = "<<ui+i<<std::endl;
std::cout<<"Postive"<<std::endl;

else

std::cout<<"Negative"<<std::endl;

std::cout<<"sizeof(s+'b') = "<<sizeof(s+'b')<<std::endl;
return 0;

輸出結果:

root@txp-virtual-machine:/home/txp# g++ test.cpp
root@txp-virtual-machine:/home/txp# ./a.out
d =-200
ui= 100
(ui+i) = 4294967196
Postive
sizeof(s+'b') = 4

注解:這里我們發現sizeof出來的內存大小是4個字節大小;其實這里編譯器把short和char類型的都轉換int類型了,所以最終兩個int數據相加,所占的內存大小就是int類型了。

所以咋們平時在寫代碼的時候,腦袋里面要有這種寫代碼謹慎的思維,防止出現這種隱式轉換的情況出現,養成寫代碼的好習慣

2、普通類型與類類型之間能否進行類型轉換,類類型之間又是否能夠類型轉換呢?

為了說明這些問題,咋們通過實際的代碼測試來看看啥情況:

代碼:普通類型轉換成類類型

#include <iostream>
#include <string>
class Test{
public:
Test()


Test(int i)


};
int main()

Test t;
t =6; 從 C 語言角度,這里將 5 強制類型轉換到 Test 類型,只不過編譯器 在這里做了隱式類型轉換
return 0;

輸出結果(顯示可以編譯通過)

root@txp-virtual-machine:/home/txp# g++ test.cpp
root@txp-virtual-machine:/home/txp# ./a.out

代碼類類型轉換為普通類型

#include <iostream>
#include <string>
class Test{
public:
Test()


Test(int i)


};
int main()

Test t;
int i = t;
return 0;

輸出結果(沒有編譯通過)

root@txp-virtual-machine:/home/txp# g++ test.cpp
test.cpp: In function ‘int main()’:
test.cpp:21:14: error: cannot convert ‘Test’ to ‘int’ in initialization
int i = t;

代碼類類型與類類型之間的轉換:

#include <iostream>
#include <string>
class Value{
};
class Test{
public:
Test()


Test(int i)


};
int main()

Test t;
Value i;
t=i;
return 0;

輸出結果(暫時還是不行,編譯不通過):

root@txp-virtual-machine:/home/txp# g++ test.cpp
test.cpp: In function ‘int main()’:
test.cpp:27:7: error: no match for ‘operator=’ (operand types are ‘Test’ and ‘Value’)
t=i;

test.cpp:27:7: note: candidate is:
test.cpp:9:7: note: Test& Test::operator=(const Test&)
class Test{

test.cpp:9:7: note: no known conversion for argument 1 from ‘Value’ to ‘const Test&’

說明:上面的例子,我們只是簡單的按照實際角度出發,發現確實有寫轉換行不通。那么真理到底是怎樣的?我們接著往下看

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 可編程邏輯
    +關注

    關注

    7

    文章

    524

    瀏覽量

    44603
  • C++
    C++
    +關注

    關注

    22

    文章

    2117

    瀏覽量

    74838
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    基于LockAI視覺識別模塊:C++目標檢測

    本文檔基于瑞芯微RV1106的LockAI凌智視覺識別模塊,通過C++語言做的目標檢測實驗。本文檔展示了如何使用lockzhiner_vision_module::PaddleDet類進行目標檢測,并通過lockzhiner_vision_module::Visualize函數
    的頭像 發表于 06-06 13:56 ?92次閱讀
    基于LockAI視覺識別模塊:<b class='flag-5'>C++</b>目標檢測

    西門子TIA Portal中函數FC和函數塊FB的相互轉換

    描述 本文將介紹在西門子 TIA Portal 中使用 Add-In 插件實現函數 FC 和函數塊 FB 的相互轉換的方法和步驟。 第1步: 添加 PLC 設備。 選擇西門子 CPU 1214
    的頭像 發表于 01-15 10:07 ?1705次閱讀
    西門子TIA Portal中<b class='flag-5'>函數</b>FC和<b class='flag-5'>函數</b>塊FB的相互<b class='flag-5'>轉換</b>

    Spire.XLS for C++組件說明

    開發人員可以快速地在 C++ 平臺上完成對 Excel 的各種編程操作,如根據模板創建新的 Excel 文檔,編輯現有 Excel 文檔,以及對 Excel 文檔進行轉換。 Spire.XLS
    的頭像 發表于 01-14 09:40 ?547次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件說明

    同樣是函數,在CC++中有什么區別

    同樣是函數,在 CC++ 中有什么區別? 第一個返回值。 C語言的函數可以不寫返回值類型
    的頭像 發表于 11-29 10:25 ?821次閱讀

    ADS1299EEGFE-PDK在window上如何通過C++讀取8通道數據?

    入手了一塊ADS1299EEGFE-PDK,想用這塊板做eeg測試,開發語言是c++,window平臺,這塊板沒有提供sdk之類的,怎么獲取8個通道的數據,有沒有做過的朋友?
    發表于 11-27 06:51

    C++新手容易犯的十個編程錯誤

    簡單的總結一下?C++ 新手容易犯的一些編程錯誤,給新人們提供一個參考。 1 有些關鍵字在 cpp 文件中多寫了 對于 C++ 類,一些關鍵字只要寫在 .h 中就好,cpp 中就不用再加上了,比如
    的頭像 發表于 11-15 12:42 ?939次閱讀

    C語言和C++中結構體的區別

    同樣是結構體,看看在C語言和C++中有什么區別?
    的頭像 發表于 10-30 15:11 ?678次閱讀

    C7000優化C/C++編譯器

    電子發燒友網站提供《C7000優化C/C++編譯器.pdf》資料免費下載
    發表于 10-30 09:45 ?0次下載
    <b class='flag-5'>C</b>7000優化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>編譯器

    OpenVINO2024 C++推理使用技巧

    很多人都使用OpenVINO新版的C++ 或者Python的SDK,都覺得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的優化與整理,已經是非常貼近開發的使用習慣與推理方式。與OpenCV的Mat對象對接方式更是幾乎無縫對接,非常的方便好用。
    的頭像 發表于 07-26 09:20 ?1463次閱讀

    c++編譯后鏈接失敗的原因?如何解決?

    /c++項目,將剛才新建的項目轉換c++項目。 完成后點擊編譯,此時也是正常的。 新建一個cpp文件,將原項目的main.c中內容全部拷貝到新建的cpp文件中保存,然后刪除原main
    發表于 07-25 08:13

    ModusToolbox 3.2在c代碼中包含c++代碼的正確步驟是什么?

    使用 ModusToolbox 3.2 我有一個用純 C 語言編寫的 XMC4700 項目。 我正在嘗試添加一些 C++ 函數,并將其合并到我的原始代碼中。 我可以構建獨立的 .cpp/.hpp
    發表于 07-23 08:21

    C++語言基礎知識

    電子發燒友網站提供《C++語言基礎知識.pdf》資料免費下載
    發表于 07-19 10:58 ?8次下載

    C++中實現類似instanceof的方法

    函數,可實際上C++中沒有。但是別著急,其實C++中有兩種簡單的方法可以實現類似Java中的instanceof的功能。 在 C++ 中,確定對象的
    的頭像 發表于 07-18 10:16 ?879次閱讀
    <b class='flag-5'>C++</b>中實現類似instanceof的方法

    OpenCV圖像識別C++代碼

    的頭文件 在您的C++代碼中,包含以下必要的頭文件: # include # include # include # include # include # include # include 讀取圖像
    的頭像 發表于 07-16 10:42 ?4068次閱讀

    Perforce靜態代碼分析專家解讀MISRA C++:2023?新標準:如何安全、高效地使用基于范圍的for循環,防范未定義行

    的特定規則。 什么是MISRA C++:2023規則9.5.2,為什么它很重要? MISRA C++:2023 引入了規則 9.5.2 “for-range 初始值設定項最多應包含一個函數調用”
    的頭像 發表于 06-18 12:57 ?712次閱讀
    主站蜘蛛池模板: 欧美成人午夜精品一区二区 | 色老成人精品视频在线观看 | 在线观看黄的网站 | 亚洲国产精品综合久久网络 | 91在线激情在线观看 | 亚洲国产精品综合久久2007 | 1024免费永久福利视频 | h视频在线免费观看 | 拍拍拍无挡视频免费全程1000 | 天天综合天天射 | 亚洲欧美一区二区三区另类 | 免费黄色大片网站 | 天天摸天天做天天爽天天弄 | 天天天天做夜夜夜夜 | 狠狠色丁香婷婷久久综合不卡 | 欧美成人天天综合在线视色 | 四虎最新永久免费网址 | 欧美ol丝袜高跟秘书在线播放 | 人与牲动交xxxxbbb | 天天操天天谢 | www.色五月| 国产午夜一区二区在线观看 | 亚洲一级色片 | 9久久99久久久精品齐齐综合色圆 | 精品久久久久久婷婷 | 给个网站可以在线观看你懂的 | 亚洲 另类色区 欧美日韩 | 黄 色 片成 人免费观看 | 天天看片网站 | 美女扒开尿口给男人爽免费视频 | 四虎8848精品永久在线观看 | 风流护士 | 免费高清一级欧美片在线观看 | 啪啪在线视频 | 天天干天天摸天天操 | 国产巨大bbbb天美 | a级毛片网 | 天天综合五月天 | 男男h全肉耽污 | 亚洲精品精品一区 | jizz性欧美12 |