第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

為什么“使用命名空間std”被認(rèn)為是不好的做法?

為什么“使用命名空間std”被認(rèn)為是不好的做法?

我已經(jīng)告訴別人,編寫using namespace std代碼是錯(cuò)誤的,我應(yīng)該用std::cout和std::cin直接代替。為什么被using namespace std認(rèn)為是不好的做法?是低效還是冒著聲明模糊變量(與名稱std空間中的函數(shù)具有相同名稱的變量)的風(fēng)險(xiǎn)?它會影響性能嗎?
查看完整描述

7 回答

?
MM們

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

這根本與性能無關(guān)。但請考慮一下:您正在使用兩個(gè)名為Foo和Bar的庫:

using namespace foo;using namespace bar;

一切正常,你可以毫無問題地Blah()從Foo和Quux()Bar 打電話。但有一天你升級到新版本的Foo 2.0,它現(xiàn)在提供了一個(gè)名為的功能Quux()。現(xiàn)在你遇到了沖突:Foo 2.0和Bar都導(dǎo)入Quux()了你的全局命名空間。這將需要一些努力來修復(fù),特別是如果函數(shù)參數(shù)碰巧匹配。

如果你使用過foo::Blah()bar::Quux(),然后引進(jìn)的foo::Quux()將是一個(gè)非事件。


查看完整回答
反對 回復(fù) 2019-05-20
?
吃雞游戲

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

Library Foo 2.0可以引入一個(gè)函數(shù),Quux()這對于你的一些調(diào)用來說Quux()bar::Quux()你多年來調(diào)用的代碼更明確地匹配。然后你的代碼仍然編譯,但它默默地調(diào)用錯(cuò)誤的函數(shù),并且知道神知道什么。這和事情一樣糟糕。

請記住,在std命名空間有萬噸標(biāo)識符,其中許多都是常見的(想想listsort,stringiterator,等),這是非常有可能出現(xiàn)在其他的代碼了。

如果你認(rèn)為這不太可能:在我給出這個(gè)答案大約半年之后,在Stack Overflow上有一個(gè)問題,其中幾乎發(fā)生了這種情況(錯(cuò)誤的函數(shù)被稱為由于省略了std::前綴)。是另一個(gè)最近這樣一個(gè)問題的例子。所以這是一個(gè)真正的問題。


這里還有一個(gè)數(shù)據(jù)點(diǎn):很多年前,我也常常發(fā)現(xiàn)它必須為標(biāo)準(zhǔn)庫中的所有內(nèi)容添加前綴std::。然后我在一個(gè)項(xiàng)目中工作,在開始時(shí)決定using禁止指令和聲明,除了函數(shù)范圍。你猜怎么著?我們大部分時(shí)間都花了很長時(shí)間才習(xí)慣編寫前綴,經(jīng)過幾周后,我們大多數(shù)人甚至同意它實(shí)際上使代碼更具可讀性。這是有原因的:你喜歡更短或更長的散文是主觀的,但前綴客觀上增加了代碼的清晰度。不僅是編譯器,而且您也更容易看到引用哪個(gè)標(biāo)識符。

十年來,該項(xiàng)目增長了數(shù)百萬行代碼。由于這些討論一次又一次地出現(xiàn),我曾經(jīng)很好奇這個(gè)(允許的)功能范圍using實(shí)際上在項(xiàng)目中的使用頻率。我找了它的來源,只發(fā)現(xiàn)了一兩個(gè)地方使用它。對我而言,這表明,一旦嘗試過,開發(fā)人員std::即使在允許使用指令的情況下,即使每100kLoC使用指令也不會發(fā)現(xiàn)痛苦。


底線:明確地為所有內(nèi)容添加前綴不會造成任何傷害,很少習(xí)慣,并具有客觀優(yōu)勢。特別是,它使編碼器和人類讀者更容易理解代碼 - 這應(yīng)該是編寫代碼時(shí)的主要目標(biāo)。


查看完整回答
反對 回復(fù) 2019-05-20
?
藍(lán)山帝景

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

放入using namespace類的頭文件的問題在于它強(qiáng)制任何想要使用您的類(通過包含頭文件)的人也可以“使用”(即看到所有內(nèi)容)這些其他命名空間。

但是,您可以隨意在(私有)* .cpp文件中放置using語句。


請注意,有些人不同意我這樣的說法“感覺自由” - 因?yàn)殡m然cpp文件中的using語句比標(biāo)題中的更好(因?yàn)樗粫绊懓^文件的人),但他們認(rèn)為它仍然存在沒有良好的(因?yàn)檫@取決于它的代碼可以使課堂更加難以維持的實(shí)現(xiàn))。這個(gè)FAQ主題說,

using-directive存在于遺留C ++代碼中,并且可以簡化向命名空間的轉(zhuǎn)換,但您可能不應(yīng)該定期使用它,至少不能在新的C ++代碼中使用它。

FAQ提出兩種選擇:

  • 使用聲明:

    using std::cout; // a using-declaration lets you use cout without qualificationcout << "Values:";
  • 只需輸入std ::

    std::cout << "Values:";


查看完整回答
反對 回復(fù) 2019-05-20
?
瀟湘沐

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

不應(yīng)該在全局范圍內(nèi)使用using指令,尤其是在頭文件中。但是,即使在頭文件中也存在適當(dāng)?shù)那闆r:

template <typename FloatType> inlineFloatType compute_something(FloatType x){
    using namespace std; //no problem since scope is limited
    return exp(x) * (sin(x) - cos(x * 2) + sin(x * 3) - cos(x * 4));}

這比顯式限定(std::sin,std::cos...)更好,因?yàn)樗滩⑶夷軌蚴褂糜脩舳x的浮點(diǎn)類型(通過Argument Dependent Lookup)。


查看完整回答
反對 回復(fù) 2019-05-20
  • 7 回答
  • 0 關(guān)注
  • 1536 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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