2024算法開發(fā)規(guī)范標(biāo)準(zhǔn)_第1頁(yè)
2024算法開發(fā)規(guī)范標(biāo)準(zhǔn)_第2頁(yè)
2024算法開發(fā)規(guī)范標(biāo)準(zhǔn)_第3頁(yè)
2024算法開發(fā)規(guī)范標(biāo)準(zhǔn)_第4頁(yè)
2024算法開發(fā)規(guī)范標(biāo)準(zhǔn)_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

C++Google大部分開源項(xiàng)目的主要編程語(yǔ)言.C++程序員都知道的,C++有很多強(qiáng)大的特性,bug,難以閱讀和維本段內(nèi)容的目的是通過(guò)詳細(xì)闡述C++注意事項(xiàng)來(lái)駕馭其復(fù)雜性.這些規(guī)則在保證代碼易于管理的同時(shí),C++的語(yǔ)言特性風(fēng)格,亦被稱作可讀性,C++編程的約定.使用術(shù)語(yǔ)“風(fēng)格”有些用詞不當(dāng),因?yàn)檫@些習(xí)慣遠(yuǎn)不止源代碼文件格式化這么簡(jiǎn)單.使代碼易于管理的方法之一是加強(qiáng)代碼一致性.讓任何程序員都可以快速讀懂你的代碼這.標(biāo)識(shí)符的含義.創(chuàng)建通用,必需的習(xí)慣用語(yǔ)和模式可以使代碼更容易理解.在一些情況下可能有充分的理由改變某些編程風(fēng)格,但我們還是應(yīng)該遵循一致性原則,盡量不這么做.C++特性的臃腫C++是一門包含大量高級(jí)特性的龐大語(yǔ)言.某些情況下我們會(huì)限制甚至禁止使用某些特性.這么做是為了保持代碼清爽,避免這些特性可能導(dǎo)致的各種問(wèn)題.指南中列舉了這類特性,并解釋為什么這些特性被限制使用.Google主導(dǎo)的開源項(xiàng)目均符合本指南的規(guī)定注意:C++教程,C++非常熟悉通常每一個(gè).cc文件都有一個(gè)對(duì)應(yīng)的.h文件.也有一些常見例外,如單元測(cè)試代碼和只main().cc文件.正確使用頭文件可令代碼在可讀性、文件大小和性能上大為改觀.Self-contained所有頭文件要能夠自給自足。換言之,用戶和重構(gòu)工具不需要為特別場(chǎng)合而包含額外一個(gè)頭文件要有dne也不要求定義任何特別ybo.不過(guò)有一個(gè)例外,即一個(gè)文件并不是e-oand(platform-specific).inc.h文件聲明.cc-inl.h私有成員,那么它就只能定義在實(shí)例化該模板的.cc文件里。#define所有頭文件都應(yīng)該使用#define來(lái)防止頭文件被多重包含,命名格式當(dāng)是為保證唯一性,頭文件的命名應(yīng)該基于所在項(xiàng)目源代碼樹的全路徑.例如,項(xiàng)目foo/src/bar/baz.h可按如下方式保護(hù)優(yōu)點(diǎn):能夠節(jié)省編譯時(shí)間,多余的#include會(huì)迫使編譯器展開更多的文件,處理更多的輸入。能夠節(jié)省不必要的重新編譯的時(shí)間。#include使代碼因?yàn)轭^文件API.前置聲明來(lái)自命名空間std::的symbol時(shí),其行為未定義。#include。極端情況下,前置聲明代替includes甚至都會(huì)暗暗地改變代碼的含義:#includeBD的前置聲明替代,test()f(void*symbolinclude冗長(zhǎng)。.函數(shù):總是使用#include.#include定義:當(dāng)函數(shù)被聲明為內(nèi)聯(lián)函數(shù)之后,編譯器會(huì)將其內(nèi)聯(lián)展開,而不是按通常的函數(shù)調(diào)優(yōu)點(diǎn):只要內(nèi)聯(lián)的函數(shù)體較小,內(nèi)聯(lián)該函數(shù)可以令目標(biāo)代碼更加高效.對(duì)于存取函數(shù)以及其它函數(shù)體比較短,性能關(guān)鍵的函數(shù),鼓勵(lì)使用內(nèi)聯(lián).缺點(diǎn):濫用內(nèi)聯(lián)將導(dǎo)致程序變得更慢.內(nèi)聯(lián)可能使目標(biāo)代碼量或增或減,這取決于內(nèi)聯(lián)內(nèi)聯(lián)非常短小的存取函數(shù)通常會(huì)減少代碼大小,但內(nèi)聯(lián)一個(gè)相當(dāng)大的函數(shù)將戲劇性的增加代碼大小.現(xiàn)代處理器由于更好的利用了指令緩存,小巧的代碼往結(jié)論:一個(gè)較為合理的經(jīng)驗(yàn)準(zhǔn)則是,不要內(nèi)聯(lián)超過(guò)10行的函數(shù).謹(jǐn)慎對(duì)待析構(gòu)函數(shù),析構(gòu)函數(shù)往往比其表面看起來(lái)要更長(zhǎng),因?yàn)橛须[含的成員和基類析構(gòu)函數(shù)被調(diào)另一個(gè)實(shí)用的經(jīng)驗(yàn)準(zhǔn)則:內(nèi)聯(lián)那些包含循環(huán)或switch語(yǔ)句的函數(shù)常常是得不償失(除非在大多數(shù)情況下,這些循環(huán)或switch語(yǔ)句從不被執(zhí)行)有些函數(shù)即使聲明為內(nèi)聯(lián)的也不一定會(huì)被編譯器內(nèi)聯(lián),這點(diǎn)很重要;不會(huì)被正常內(nèi)聯(lián).通常,遞歸函數(shù)不應(yīng)該聲明成內(nèi)聯(lián)函數(shù).YuleFox注:堆棧的展開并不像循環(huán)那么簡(jiǎn)單,比如遞歸層數(shù)在編譯時(shí)可能是未知的,大多數(shù)編譯器都不支持內(nèi)聯(lián)遞歸函數(shù)).虛函數(shù)內(nèi)聯(lián)的主要原因則是想把它的函數(shù)體放在類定義內(nèi),為了圖個(gè)方便,抑或是當(dāng)作文檔描述其行為,#include使用標(biāo)準(zhǔn)的頭文件包含順序可增強(qiáng)可讀性,避免隱藏依賴:相關(guān)頭文件,C庫(kù),C++庫(kù),其他庫(kù)的.h,本項(xiàng)目?jī)?nèi)的.h項(xiàng)目?jī)?nèi)頭文件應(yīng)按照項(xiàng)目源代碼目錄樹結(jié)構(gòu)排列,避免使用UNIX特殊的快捷目錄.(當(dāng)前目錄)或..(上級(jí)目錄).例如,google-awesome-project/src/base/logging.h應(yīng)該按又如,dir/foo.cc或dir/foo_test.cc的主要作用是實(shí)現(xiàn)或測(cè)試dir2/foo2.h的功能,foo.cc中包含dir2/foo2.h優(yōu)先位置,詳情如下CC++.h.h這種優(yōu)先的順序排序保證當(dāng)dir2/foo2.h遺漏某些必要的庫(kù)時(shí),dir/foo.cc或dir/foo_test.cc的構(gòu)建會(huì)立刻中止。因此這一條規(guī)則保證維護(hù)這些文件的人們首先看到dir/foo.ccdir2/foo2.h通常位于同一目錄下(base/basictypes_unittest.ccbase/basictypes.h),但也可以放在不同目錄下。不符合這條規(guī)則,要在方便的時(shí)候改正它們。您所依賴的符號(hào)(symbols)被哪些頭文件所定義,您就應(yīng)該包含(include)哪些頭文(forwarddeclarations)bar.h中的某個(gè)符號(hào),哪怕您所包含的foo.hbar.h,bar.h,除非foo.h有明確說(shuō)明它bar.hsymbolcc文件所對(duì)應(yīng)的「相關(guān)頭文件」已ccfoo.ccfoo.h就夠了,鼓勵(lì)在.cc文件內(nèi)使用匿名命名空間或static聲明.使用具名的命名空間時(shí),其名稱可基于項(xiàng)目名或相對(duì)路徑.禁止使用using指示(using-directive)定義:命名空間將全局作用域細(xì)分為獨(dú)立的,具名的作用域,可有效防止全局作用域的:用域內(nèi)),命名空間在這基礎(chǔ)上又封裝了一層。舉例來(lái)說(shuō),兩個(gè)不同項(xiàng)目的全局作用域都有一個(gè)類Foo,這樣在編譯或運(yùn)行時(shí)造成沖突.如果每個(gè)項(xiàng)目將代碼置于不同命名空間中project1::Fooproject2::Foo作為不同符號(hào)自然不會(huì)沖突。內(nèi)X::Y::foo()X::foo()ABI兼缺點(diǎn):命名空間具有迷惑性,因?yàn)樗鼈兪沟脜^(qū)分兩個(gè)相同命名所指代的定義更加困難。的限制。內(nèi)聯(lián)命名空間只在大型版本控制里有用。 用命名空間把文件包含,gflags的聲明/定義,以及類的前置聲明以外的整個(gè)源文件封裝起來(lái),以區(qū)別于其它命名空間:不要在命名空間std內(nèi)聲明任何東西,包括標(biāo)準(zhǔn)庫(kù)的類前置聲明在std命名空間聲明實(shí)體是未定義的行為,會(huì)導(dǎo)致如不可移植.聲明標(biāo)準(zhǔn)庫(kù)下的實(shí)體,需要包含對(duì)應(yīng)的頭文件using何在頭文件中引入的命名空間都會(huì)成為公開API的一部分。static.cc但是不要在.hnamespace:使用靜態(tài)成員函數(shù)或命名空間內(nèi)的非成員函數(shù),盡量不要用裸的全局函數(shù).將一系列函數(shù)優(yōu)點(diǎn):某些情況下,非成員函數(shù)和靜態(tài)成員函數(shù)是非常有用的,將非成員函數(shù)放在命名缺點(diǎn):將非成員函數(shù)和靜態(tài)成員函數(shù)作為新類的成員或許更有意義,當(dāng)它們需要訪問(wèn)外結(jié)論:有時(shí),把函數(shù)的定義同類的實(shí)例脫鉤是有益的,甚至是必要的.這樣的函數(shù)可以被定義成靜態(tài)成員,或是非成員函數(shù).非成員函數(shù)不應(yīng)依賴于外部變量,應(yīng)盡量置于某個(gè)命名空間內(nèi).相比單純?yōu)榱朔庋b若干不共享任何靜態(tài)數(shù)據(jù)的靜態(tài)成員函數(shù)而創(chuàng)建類,不如使用命名空間。C+一次使用越近越好.這使得代碼瀏覽者更容易定位變量聲明的位置,了解變量的

bugconstexpr(PODPlainOldData)intcharfloat,以及POD類型的指針、數(shù)組和結(jié)構(gòu)體。經(jīng)過(guò)構(gòu)造函數(shù)完全初始化后的對(duì)象可以為const類型,也能更方便地被標(biāo)準(zhǔn)容實(shí)現(xiàn).即使當(dāng)前沒有子類化實(shí)現(xiàn),將來(lái)仍是隱患.在沒有使程序崩潰(因?yàn)椴⒉皇且粋€(gè)始終合適的方法)或者使用異常(因?yàn)橐呀?jīng)如果執(zhí)行失敗,會(huì)得到一個(gè)初始化失敗的對(duì)象,這個(gè)對(duì)象有可能進(jìn)入不正常的狀態(tài),必須使用boolIsValid(構(gòu)造函數(shù)的地址是無(wú)法被取得的,因此,舉例來(lái)說(shuō),由構(gòu)造函數(shù)完成的工作是無(wú)法錯(cuò)誤的方式.否則,考慮用Init()方法或工廠函數(shù).構(gòu)造函數(shù)不得調(diào)用虛函數(shù),或嘗試報(bào)告一個(gè)非致命錯(cuò)誤.如果對(duì)象需要進(jìn)行有意義的(non-trivial)初始化,考慮使用明確的Init()方法或使用工廠模式.AvoidInit()methodsonobjectswithnootherstatesthataffectwhichpublicmethodsmaybecalled(此explicit定義:隱式類型轉(zhuǎn)換允許一個(gè)某種類型(稱作源類型)的對(duì)象被用于需要另一種類型(稱作目的類型)的位置,intdouble除了語(yǔ)言所定義的隱式類型轉(zhuǎn)換,用戶還可以通過(guò)在類定義中添加合適的成員定轉(zhuǎn)換運(yùn)算符實(shí)現(xiàn)(例如operatorbool()).在目的類型中定義隱式類型轉(zhuǎn)換,則通過(guò)以源類型作為其唯一參數(shù)(或唯一無(wú)默認(rèn)值的參數(shù))的構(gòu)造函數(shù)實(shí)現(xiàn).ExplicitC++11引入)類型轉(zhuǎn)換運(yùn)算符,以保證只有當(dāng)目的類型在調(diào)用點(diǎn)被顯式寫明時(shí)才能進(jìn)行類型轉(zhuǎn)換,例如使用cast.這不僅作用于隱式類型轉(zhuǎn)換,還能作用于C++11的列表初始化語(yǔ)法:這一代碼從技術(shù)上說(shuō)并非隱式類型轉(zhuǎn)換,但是語(yǔ)言標(biāo)準(zhǔn)認(rèn)為這是explicit應(yīng)當(dāng)至用戶根本沒有意識(shí)到發(fā)生了類型轉(zhuǎn)換.隱式類型轉(zhuǎn)換會(huì)讓代碼難以閱讀,尤其是在有函數(shù)重載的時(shí)候,因?yàn)檫@時(shí)很難判如果單參數(shù)構(gòu)造函數(shù)沒有加上explicit關(guān)鍵字,讀者無(wú)法判斷這一函數(shù)究竟是explicit標(biāo)記.并沒有明確的方法用來(lái)判斷哪個(gè)類應(yīng)該提供類型轉(zhuǎn)換,這會(huì)使得代碼變得含糊不清.如果目的類型是隱式指定的,那么列表初始化會(huì)出現(xiàn)和隱式類型轉(zhuǎn)換一樣的問(wèn)題,結(jié)論:在類型定義中,類型轉(zhuǎn)換運(yùn)算符和單參數(shù)構(gòu)造函數(shù)都應(yīng)當(dāng)用explicit進(jìn)行標(biāo)記.一個(gè)例外是,拷貝和移動(dòng)構(gòu)造函數(shù)不應(yīng)當(dāng)被標(biāo)記為explicit,因?yàn)樗鼈儾⒉粓?zhí)行類型轉(zhuǎn)換.對(duì)于設(shè)計(jì)目的就是用于對(duì)其他類型進(jìn)行透明包裝的類來(lái)說(shuō),隱式explicitstd::initializer_listexplicitMyTypem={1,2};).總述:如果你的類型需要,就讓它們支持拷貝/移動(dòng).否則,就把隱式產(chǎn)生的拷貝和移定義:可拷貝類型允許對(duì)象在初始化時(shí)得到來(lái)自相同類型的另一對(duì)象的值,或在賦值時(shí)拷貝操作一般通過(guò)拷貝構(gòu)造函數(shù)與拷貝賦值操作符定義.string類型就是一個(gè)賦予相同類型的臨時(shí)對(duì)象的值(因此所有可拷貝對(duì)象也是可移動(dòng)的).std::unique_ptr<int>就是一個(gè)可移動(dòng)但不可復(fù)制的對(duì)象的例子.對(duì)于用戶定義的類型,移動(dòng)操作一般是通過(guò)移動(dòng)構(gòu)造函數(shù)和移動(dòng)賦值操作符實(shí)現(xiàn)的.拷貝/移動(dòng)構(gòu)造函數(shù)在某些情況下會(huì)被編譯器隱式調(diào)用.例如,通過(guò)傳值的方式傳優(yōu)點(diǎn):可移動(dòng)及可拷貝類型的對(duì)象可以通過(guò)傳值的方式進(jìn)行傳遞或者返回,這使得API更簡(jiǎn)單,更安全也更通用.與傳指針和引用不同,這樣的傳遞不會(huì)造成所有權(quán),了客戶端與實(shí)現(xiàn)在非作用域內(nèi)的交互,使得它們更容易被理解與維護(hù)這樣的對(duì)象API拷貝/移動(dòng)構(gòu)造函數(shù)與賦值操作一般來(lái)說(shuō)要比它們的各種替代方案,比如CloneCopyFromorSwap(),更容易定義,因?yàn)樗鼈兡芡ㄟ^(guò)編譯器產(chǎn)生,無(wú)論是隱式的還是通過(guò)=default.這種方式很簡(jiǎn)潔,也保證所有數(shù)據(jù)成員都會(huì)被復(fù)制.拷貝與移動(dòng)構(gòu)造函數(shù)一般也更高效,因?yàn)樗鼈儾恍枰训姆峙浠蛘呤菃为?dú)的初始化和賦值步驟,同時(shí),對(duì)于類似省略不必要的拷貝這樣的優(yōu)化它們也更加合適.移動(dòng)操作允許隱式且高效地將源數(shù)據(jù)轉(zhuǎn)移出右值對(duì)象.這有時(shí)能讓代碼單件類型(Registerer),Cleanup(Mutex)從邏輯上來(lái)說(shuō)都不應(yīng)該提供拷貝操作.為基類提供拷貝/賦值操作是有害的,因?yàn)樵谑褂盟鼈儠r(shí)會(huì)造成對(duì)象切割.默認(rèn)的或者隨意的拷貝操作實(shí)現(xiàn)可能是不正確的,這往往導(dǎo)致令人困惑并且難以診斷出的錯(cuò)誤.拷貝構(gòu)造函數(shù)是隱式調(diào)用的,也就是說(shuō),這些調(diào)用很容易被忽略.這會(huì)讓人迷惑,尤其是對(duì)那些所用的語(yǔ)言約定或強(qiáng)制要求傳引用的程序員來(lái)說(shuō)更是如此.同時(shí),這從一定程度上說(shuō)會(huì)鼓勵(lì)過(guò)度拷貝,從而導(dǎo)致性能上的問(wèn)題.結(jié)論:如果需要就讓你的類型可拷貝/可移動(dòng).作為一個(gè)經(jīng)驗(yàn)法則,如果對(duì)于你的用戶來(lái)型可拷貝,一定要同時(shí)給出拷貝構(gòu)造函數(shù)和賦值操作的定義,反之亦然.如果讓戶顯然可見,那么把這個(gè)類型設(shè)置為只可移動(dòng)并定義移動(dòng)的兩個(gè)操作.由于存在對(duì)象切割的風(fēng)險(xiǎn),不要為任何有可能有派生類的對(duì)象提供賦值操作或者拷貝/移動(dòng)構(gòu)造函數(shù)(當(dāng)然也不要繼承有這樣的成員函數(shù)的類).如果你的基類需要可publicvirtualCloneprotectedpublicdeletevs總述:僅當(dāng)只有數(shù)據(jù)成員時(shí)使用struct,其它一概使用class.說(shuō)明在C++中struct和class關(guān)鍵字幾乎含義一樣.我們?yōu)檫@兩個(gè)關(guān)鍵字添加我們自己的語(yǔ)義理解,以便為定義的數(shù)據(jù)類型選擇合適的關(guān)鍵字.struct用來(lái)定義包含數(shù)據(jù)的被動(dòng)式對(duì)象,也可以包含相關(guān)的常量,但除了存取數(shù)據(jù)成員之外,.并且存取功能是通過(guò)直接訪問(wèn)位域,而非函數(shù)調(diào)用.除了構(gòu)造函數(shù),析構(gòu)函數(shù)Initialize(Reset(),等類似的用于設(shè)定數(shù)據(jù)成員的函數(shù)外,不能提供其它功能的函數(shù).如果需要更多的函數(shù)功能class更適合.如果拿不準(zhǔn),STL保持一致,class注意:(YuleFox注:GoF<<DesignPatterns>>里反復(fù)強(qiáng)調(diào)的)常常比使用繼承更合理.如果使用繼承的話,定義為public繼承.定義:當(dāng)子類繼承基類時(shí),子類包含了父基類所有數(shù)據(jù)及操作的定義C++實(shí)踐中,繼承主要用于兩種場(chǎng)合:實(shí)現(xiàn)繼承,子類繼承父類的實(shí)現(xiàn)代碼;接口繼承,子類僅繼承父類優(yōu)點(diǎn):實(shí)現(xiàn)繼承通過(guò)原封不動(dòng)的復(fù)用基類代碼減少了代碼量.由于繼承是在編譯時(shí)聲明,程序員和編譯器都可以理解相應(yīng)操作并發(fā)現(xiàn)錯(cuò)誤.從編程角度而言,接口繼承是用來(lái)強(qiáng)API.API中某個(gè)必須的方法時(shí),編譯器同樣會(huì)發(fā)現(xiàn)并缺點(diǎn):對(duì)于實(shí)現(xiàn)繼承,由于子類的實(shí)現(xiàn)代碼散布在父類和子類間之間,要理解其實(shí)現(xiàn)變得更加困難.子類不能重寫父類的非虛函數(shù),當(dāng)然也就不能修改其實(shí)現(xiàn).基類也可能定義了一些數(shù)據(jù)成員,因此還必須區(qū)分基類的實(shí)際布局.public的.如果你想使用私有繼承,你應(yīng)該替換成把基類的實(shí)例作不要過(guò)度使用實(shí)現(xiàn)繼承.組合常常更合適一些.盡量做到只在“是一個(gè)”(“is-a注:其他“has-a”情況下請(qǐng)使用組合)的情況下使用繼承:Bar的確“是一種”Foo,Bar才能繼承Foo.必要的話,virtual.如果你的類有虛函數(shù),則析構(gòu)函數(shù)也應(yīng)該為虛對(duì)于可能被子類訪問(wèn)的成員函數(shù),protected關(guān)鍵字.注意,數(shù)據(jù)成員對(duì)于重載的虛函數(shù)或虛析構(gòu)函數(shù),使用override,或(較不常用的)final關(guān)鍵字顯式地進(jìn)行標(biāo)記.較早(早于C++11)的代碼可能會(huì)使用virtual關(guān)鍵字作為不得已的選項(xiàng).因此,在聲明重載時(shí),請(qǐng)使用override,final或virtual的其中之一進(jìn)行標(biāo)記.標(biāo)記為override或final的析構(gòu)函數(shù)如果不是對(duì)基類虛函數(shù)的重載的話,編譯會(huì)報(bào)錯(cuò),這有助于捕獲常見的錯(cuò)誤.這些標(biāo)記起到了文檔的作用,因?yàn)槿绻÷赃@些關(guān)鍵字,代碼閱讀者不得不檢查所有父類,以判斷該函數(shù)是否是虛函數(shù)..承:最多只有一個(gè)基類是非抽象類;其它基類都是以Interface為后綴的純接.(見繼承),多重實(shí)現(xiàn)繼承可以復(fù)用更多的代碼.有時(shí)多重實(shí)現(xiàn)繼承看上去是不錯(cuò)的解決方案,但這時(shí)你通常也可以找到一個(gè)更明確,更清晰的不同解決方,才允許使用多重繼承.為確保它們是純接口,這些類必須以Interface為后綴.Windowsprivate,staticconst(遵循常量命名規(guī)則出于技術(shù)上的原因,GoogleTest總述:將相似的聲明放在一起,public部分放在最前說(shuō)明:類定義一般應(yīng)以public:開始,后跟protected:,最后是private:.省略空部分.在各個(gè)部分中,建議將類似的聲明放在一起,并且建議以如下的順序:類型(包括typedef,using和嵌套的結(jié)構(gòu)體與類),常量,工廠函數(shù),構(gòu)造函數(shù),賦值運(yùn)算符,析構(gòu)函數(shù),其它函數(shù),數(shù)據(jù)成員.不要將大段的函數(shù)定義內(nèi)聯(lián)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論