在线观看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

    文章

    516

    瀏覽量

    44111
  • C++
    C++
    +關注

    關注

    22

    文章

    2112

    瀏覽量

    73706
收藏 人收藏

    評論

    相關推薦

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

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

    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 ?411次閱讀

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

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

    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>編譯器

    C++語言基礎知識

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

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

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

    OpenCV圖像識別C++代碼

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

    FX2 CY7C68013A如何在C++環境中使用LoadEEPROM函數

    我使用的是 FX2 CY7C68013A 芯片。 我知道 CyUSB.NET 庫中有我需要的 LoadEEPROM 函數。 請問如何在 C++ 環境而不是 C#/CLR 環境中使用該
    發表于 05-31 06:59

    鴻蒙OS開發實例:【Native C++

    使用DevEco Studio創建一個Native C++應用。應用采用Native C++模板,實現使用NAPI調用C標準庫的功能。使用C標準庫hypot接口計算兩個給定數平方和的平
    的頭像 發表于 04-14 11:43 ?2678次閱讀
    鴻蒙OS開發實例:【Native <b class='flag-5'>C++</b>】

    使用 MISRA C++:2023? 避免基于范圍的 for 循環中的錯誤

    在前兩篇博客中,我們?向您介紹了新的 MISRA C++ 標準?和?C++ 的歷史?。在這篇博客中,我們將仔細研究以 C++ 中?for?循環為中心的特定規則。
    的頭像 發表于 03-28 13:53 ?822次閱讀
    使用 MISRA <b class='flag-5'>C++</b>:2023? 避免基于范圍的 for 循環中的錯誤

    C語言數據類型有哪些

    C 語言中,數據類型指的是用于聲明不同類型的變量或函數的一個廣泛的系統。變量的類型決定了變量存儲占用的空間,以及如何解釋存儲的位模式。
    發表于 03-20 10:56 ?488次閱讀
    <b class='flag-5'>C</b>語言數據<b class='flag-5'>類型</b>有哪些

    C語言如何掌握強制類型轉換的精髓

    強制類型轉換是把變量從一種類型轉換為另一種數據類型。例如,如果您想存儲一個 long 類型的值到
    的頭像 發表于 02-26 11:00 ?534次閱讀
    <b class='flag-5'>C</b>語言如何掌握強制<b class='flag-5'>類型</b><b class='flag-5'>轉換</b>的精髓

    c語言,c++,java,python區別

    C語言、C++、Java和Python是四種常見的編程語言,各有優點和特點。 C語言: C語言是一種面向過程的編程語言。它具有底層的特性,能夠對計算機硬件進行直接操作。
    的頭像 發表于 02-05 14:11 ?2458次閱讀

    C++簡史:C++是如何開始的

    MISRA C++:2023,MISRA? C++ 標準的下一個版本,來了!為了幫助您做好準備,我們介紹了 Perforce 首席技術支持工程師 Frank van den Beuken 博士撰寫
    的頭像 發表于 01-11 09:00 ?622次閱讀
    <b class='flag-5'>C++</b>簡史:<b class='flag-5'>C++</b>是如何開始的
    主站蜘蛛池模板: 天天噜天天射| 四虎国产在线| 午夜网站免费| 亚洲视频 欧美视频| 午夜激情小视频| www.亚洲免费| 婷婷丁香久久| 一级片影院| 国产精品高清一区二区三区不卡| 国产一区二区三区美女图片 | 国产午夜视频高清| 2016天天干| 午夜免费观看| 天天射天天干天天| 国产精品夜夜春夜夜| 欧美一区二区三区激情啪啪 | 亚洲第一成网站| 久久系列| xxxxxx日本老师hd68| 国产在线麻豆自在拍91精品| 天天色影| 久久久综合色| 亚洲国产午夜看片| 激情五月宗合网| 欧美成人免费网站| 我不卡老子影院午夜伦我不卡四虎 | 狠狠干亚洲色图| 新版天堂资源中文在线| 国产片在线| 美女视频一区二区三区| 四虎精品免费国产成人| 激情综合丁香| 天堂资源在线| h网站在线免费观看| 亚洲成a人片毛片在线| 欧美高清milf在线播放| 波多野结衣在线视频观看| 久在操| 劳拉淫欲护士bd字幕| 日韩欧美一级| www.99在线|