色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    517

    瀏覽量

    44165
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73835
收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

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

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

    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 ?668次閱讀
    <b class='flag-5'>C++</b>中實現類似instanceof的方法

    OpenCV圖像識別C++代碼

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

    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 ?2758次閱讀
    鴻蒙OS開發實例:【Native <b class='flag-5'>C++</b>】

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

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

    C語言數據類型有哪些

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

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

    強制類型轉換是把變量從一種類型轉換為另一種數據類型。例如,如果您想存儲一個 long 類型的值到
    的頭像 發表于 02-26 11:00 ?558次閱讀
    <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 ?2576次閱讀
    主站蜘蛛池模板: 黄图gif揉胸吸奶 | 成人中文字幕在线 | 亚洲色婷婷久久精品AV蜜桃久久 | 亚洲国产在线精品第二剧情不卡 | 色欲AV亚洲永久无码精品麻豆 | 妓女嫖客叫床粗话对白 | 坠落的丝袜美人妻 | 黄色小说男男 | 免费欧美大片 | 无颜之月全集免费观看 | 亚洲色图19p | 久久re热在线视频精69 | 521人成a天堂v| 高h辣h双处全是肉一对一 | 国产精品自产拍在线观看网站 | 99精品欧美一区二区三区美图 | 99热国产这里只有精品9九 | 亚洲国产AV精品一区二区蜜芽 | 人妻激情综合久久久久蜜桃 | 国产午夜视频 | 成人免费一级毛片在线播放视频 | bl撅高扒开臀缝哦 | 久久视热频这里只精品 | 福利一区福利二区 | 精品人伦一区二区三区潘金莲 | 亚洲人成77777在线视频 | 色一欲一性一乱一区二区三区 | 国产精品伊人 | 国产人成高清在线视频99 | 日日啪在线影院百度 | 日韩精品欧美在线视频在线 | 国内精品伊人久久久久 | 国产一区二区不卡老阿姨 | 日本久久网站 | 熟女强奷系列中文字幕 | 天天靠天天擦天天摸 | 色悠久久综合 | xxxxx69hd杨幂 | se01国产短视频在线观看 | 欧美日韩中文国产一区 | 岳的奶大又白又胖 |