最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

C++是不是類型安全的

C++是不是類型安全的

C++
慕森卡 2018-07-29 12:13:01
查看完整描述

2 回答

?
嚕嚕噠

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊

c++是類型安全的,理由如下:
如果C++使用得當(dāng),它將遠(yuǎn)比C更有類型安全性。相比于C,C++提供了一些新的機(jī)制保障類型安全:
(1)操作符new返回的指針類型嚴(yán)格與對(duì)象匹配,而不是void*;
(2)C中很多以void*為參數(shù)的函數(shù)可以改寫為C++模板函數(shù),而模板是支持類型檢查的;
(3)引入const關(guān)鍵字代替#define constants,它是有類型、有作用域的,而#define constants只是簡單的文本替換;
(4)一些#define宏可被改寫為inline函數(shù),結(jié)合函數(shù)的重載,可在類型安全的前提下支持多種類型,當(dāng)然改寫為模板也能保證類型安全;
(5)C++提供了dynamic_cast關(guān)鍵字,使得轉(zhuǎn)換過程更加安全,因?yàn)閐ynamic_cast比static_cast涉及更多具體的類型檢查。
即便如此,C++也不是絕對(duì)類型安全的編程語言。如果使用不得當(dāng),同樣無法保證類型安全。比如下面兩個(gè)例子:
int i=5;
void* pInt=&i;
double d=(*(double*)pInt);
cout<<d<<endl;

輸入結(jié)果不是5,而意想不到的結(jié)果:-9.25596e+061。又比如:
#include<iostream>
using namespace std;

class Parent
{
};
class Child1:public Parent
{
public:
int i;
Child1(int e):i(e)
{
}
};
class Child2:public Parent
{
public:
double d;
Child2(double e):d(e)
{
}
};
int main()
{
Child1 c1(5);
Child2 c2(4.1);
Parent* pp;
Child1* pc1;

pp=&c1;
pc1=(Child1*)pp; //#1 強(qiáng)制轉(zhuǎn)換,由于類型仍然為Child1*,不造成錯(cuò)誤
cout<<pc1->i<<endl;

pp=&c2;
pc1=(Child1*)pp; //#2 強(qiáng)制轉(zhuǎn)換,且類型發(fā)生變化,將造成錯(cuò)誤
cout<<pc1->i<<endl;
system("pause");
return 0;
}

結(jié)果如下:
5
1717986918
請(qǐng)按任意鍵繼續(xù). . .

查看完整回答
反對(duì) 回復(fù) 2018-08-01
?
慕妹3146593

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊

首先,類型安全代碼指 訪問被授權(quán)可以訪問的內(nèi)存位置。C++的指針操作是可以訪問任何地址的,包括那些屬于系統(tǒng)底層的文件。C/C++可以直接操作硬件,比如Windows系統(tǒng)都是C/C++寫的,所以就單單這門語言而言,它不是類型安全的。

查看完整回答
反對(duì) 回復(fù) 2018-08-01
  • 2 回答
  • 0 關(guān)注
  • 1549 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)