• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Creative Commons License
            本Blog采用 知識(shí)共享署名-非商業(yè)性使用-禁止演繹 3.0 Unported許可協(xié)議 進(jìn)行許可。 —— Fox <游戲人生>

            游戲人生

            游戲人生 != ( 人生 == 游戲 )
            站點(diǎn)遷移至:http://www.yulefox.com。請訂閱本博的朋友將RSS修改為http://feeds.feedburner.com/yulefox
            posts - 62, comments - 508, trackbacks - 0, articles - 7

            原文地址:

            • 作用域

            1. 命名空間(Namespaces)

            在.cc文件中,提倡使用不具名的命名空間(unnamed namespaces,譯者注:不具名的命名空間就像不具名的類一樣,似乎被介紹的很少:-()。使用具名命名空間時(shí),其名稱可基于項(xiàng)目或路徑名稱,不要使用using指示符。

            定義:命名空間將全局作用域細(xì)分為不同的、具名的作用域,可有效防止全局作用域的命名沖突。

            優(yōu)點(diǎn):命名空間提供了(可嵌套)命名軸線(name axis,譯者注:將命名分割在不同命名空間內(nèi)),當(dāng)然,類也提供了(可嵌套)的命名軸線(譯者注:將命名分割在不同類的作用域內(nèi))。

            舉例來說,兩個(gè)不同項(xiàng)目的全局作用域都有一個(gè)類Foo,這樣在編譯或運(yùn)行時(shí)造成沖突。如果每個(gè)項(xiàng)目將代碼置于不同命名空間中,project1::Foo和project2::Foo作為不同符號自然不會(huì)沖突。

            缺點(diǎn):命名空間具有迷惑性,因?yàn)樗鼈兒皖愐粯犹峁┝祟~外的(可嵌套的)命名軸線。在頭文件中使用不具名的空間容易違背C++的唯一定義原則(One Definition Rule (ODR))。

            結(jié)論:根據(jù)下文將要提到的策略合理使用命名空間。

            1) 不具名命名空間(Unnamed Namespaces)

            在.cc文件中,允許甚至提倡使用不具名命名空間,以避免運(yùn)行時(shí)的命名沖突:

            namespace {                                   // .cc 文件中

            // 命名空間的內(nèi)容無需縮進(jìn)
            enum { UNUSED, EOF, ERROR };          // 經(jīng)常使用的符號
            bool AtEof() { return pos_ == EOF; }   // 使用本命名空間內(nèi)的符號EOF

            }  // namespace

            然而,與特定類關(guān)聯(lián)的文件作用域聲明在該類中被聲明為類型、靜態(tài)數(shù)據(jù)成員或靜態(tài)成員函數(shù),而不是不具名命名空間的成員。像上文展示的那樣,不具名命名空間結(jié)束時(shí)用注釋// namespace標(biāo)識(shí)。

            不能在.h文件中使用不具名命名空間。

            2) 具名命名空間(Named Namespaces)

            具名命名空間使用方式如下:

            命名空間將除文件包含、全局標(biāo)識(shí)的聲明/定義以及類的前置聲明外的整個(gè)源文件封裝起來,以同其他命名空間相區(qū)分。

            // .h文件
            namespace mynamespace {

            // 所有聲明都置于命名空間中
            // 注意不要使用縮進(jìn)
            class MyClass {
            public:
              ...
              void Foo();
            };

            }  // namespace mynamespace

            // .cc文件
            namespace mynamespace {

            // 函數(shù)定義都置于命名空間中
            void MyClass::Foo() {
              ...
            }

            }  // namespace mynamespace

            通常的.cc文件會(huì)包含更多、更復(fù)雜的細(xì)節(jié),包括對其他命名空間中類的引用等。

            #include "a.h"

            DEFINE_bool(someflag, false, "dummy flag");

            class C;  // 全局命名空間中類C的前置聲明
            namespace a { class A; }  // 命名空間a中的類a::A的前置聲明

            namespace b {

            ...code for b...                // b中的代碼

            }  // namespace b

            不要聲明命名空間std下的任何內(nèi)容,包括標(biāo)準(zhǔn)庫類的前置聲明。聲明std下的實(shí)體會(huì)導(dǎo)致不明確的行為,如,不可移植。聲明標(biāo)準(zhǔn)庫下的實(shí)體,需要包含對應(yīng)的頭文件。

            最好不要使用using指示符,以保證命名空間下的所有名稱都可以正常使用。

            // 禁止——污染命名空間
            using namespace foo;

            在.cc文件、.h文件的函數(shù)、方法或類中,可以使用using。

            // 允許:.cc文件中
            // .h文件中,必須在函數(shù)、方法或類的內(nèi)部使用
            using ::foo::bar;

            在.cc文件、.h文件的函數(shù)、方法或類中,還可以使用命名空間別名。

            // 允許:.cc文件中
            // .h文件中,必須在函數(shù)、方法或類的內(nèi)部使用

            namespace fbz = ::foo::bar::baz;

            2. 嵌套類(Nested Class)

            當(dāng)公開嵌套類作為接口的一部分時(shí),雖然可以直接將他們保持在全局作用域中,但將嵌套類的聲明置于命名空間中是更好的選擇。

            定義:可以在一個(gè)類中定義另一個(gè)類,嵌套類也稱成員類(member class)。

            class Foo {

            private:
              // Bar是嵌套在Foo中的成員類
              class Bar {
                ...
              };

            };

            優(yōu)點(diǎn):當(dāng)嵌套(成員)類只在被嵌套類(enclosing class)中使用時(shí)很有用,將其置于被嵌套類作用域作為被嵌套類的成員不會(huì)污染其他作用域同名類??稍诒磺短最愔星爸寐暶髑短最悾?cc文件中定義嵌套類,避免在被嵌套類中包含嵌套類的定義,因?yàn)榍短最惖亩x通常只與實(shí)現(xiàn)相關(guān)。

            缺點(diǎn):只能在被嵌套類的定義中才能前置聲明嵌套類。因此,任何使用Foo::Bar*指針的頭文件必須包含整個(gè)Foo的聲明。

            結(jié)論:不要將嵌套類定義為public,除非它們是接口的一部分,比如,某個(gè)方法使用了這個(gè)類的一系列選項(xiàng)。

            3. 非成員函數(shù)(Nonmember)、靜態(tài)成員函數(shù)(Static Member)和全局函數(shù)(Global Functions)

            使用命名空間中的非成員函數(shù)或靜態(tài)成員函數(shù),盡量不要使用全局函數(shù)。

            優(yōu)點(diǎn):某些情況下,非成員函數(shù)和靜態(tài)成員函數(shù)是非常有用的,將非成員函數(shù)置于命名空間中可避免對全局作用域的污染。

            缺點(diǎn):將非成員函數(shù)和靜態(tài)成員函數(shù)作為新類的成員或許更有意義,當(dāng)它們需要訪問外部資源或具有重要依賴時(shí)更是如此。

            結(jié)論:

            有時(shí),不把函數(shù)限定在類的實(shí)體中是有益的,甚至需要這么做,要么作為靜態(tài)成員,要么作為非成員函數(shù)。非成員函數(shù)不應(yīng)依賴于外部變量,并盡量置于某個(gè)命名空間中。相比單純?yōu)榱朔庋b若干不共享任何靜態(tài)數(shù)據(jù)的靜態(tài)成員函數(shù)而創(chuàng)建類,不如使用命名空間。

            定義于同一編譯單元的函數(shù),被其他編譯單元直接調(diào)用可能會(huì)引入不必要的耦合和連接依賴;靜態(tài)成員函數(shù)對此尤其敏感??梢钥紤]提取到新類中,或者將函數(shù)置于獨(dú)立庫的命名空間中。

            如果你確實(shí)需要定義非成員函數(shù),又只是在.cc文件中使用它,可使用不具名命名空間或static關(guān)聯(lián)(如static int Foo() {...})限定其作用域。

            4. 局部變量(Local Variables)

            將函數(shù)變量盡可能置于最小作用域內(nèi),在聲明變量時(shí)將其初始化。

            C++允許在函數(shù)的任何位置聲明變量。我們提倡在盡可能小的作用域中聲明變量,離第一次使用越近越好。這使得代碼易于閱讀,易于定位變量的聲明位置、變量類型和初始值。特別是,應(yīng)使用初始化代替聲明+賦值的方式。

            int i;
            i = f();        // 壞——初始化和聲明分離
            nt j = g();   // 好——初始化時(shí)聲明

            注意:gcc可正確執(zhí)行for (int i = 0; i < 10; ++i)(i的作用域僅限for循環(huán)),因此其他for循環(huán)中可重用i。if和while等語句中,作用域聲明(scope declaration)同樣是正確的。

            while (const char* p = strchr(str, '/')) str = p + 1;

            注意:如果變量是一個(gè)對象,每次進(jìn)入作用域都要調(diào)用其構(gòu)造函數(shù),每次退出作用域都要調(diào)用其析構(gòu)函數(shù)。

            // 低效的實(shí)現(xiàn)
            for (int i = 0; i < 1000000; ++i) {
              Foo f;  // 構(gòu)造函數(shù)和析構(gòu)函數(shù)分別調(diào)用1000000次!
              f.DoSomething(i);
            }

            類似變量放到循環(huán)作用域外面聲明要高效的多:

            Foo f;  // 構(gòu)造函數(shù)和析構(gòu)函數(shù)只調(diào)用1次
            for (int i = 0; i < 1000000; ++i) {
              f.DoSomething(i);
            }

            5. 全局變量(Global Variables)

            class類型的全局變量是被禁止的,內(nèi)建類型的全局變量是允許的,當(dāng)然多線程代碼中非常數(shù)全局變量也是被禁止的。永遠(yuǎn)不要使用函數(shù)返回值初始化全局變量。

            不幸的是,全局變量的構(gòu)造函數(shù)、析構(gòu)函數(shù)以及初始化操作的調(diào)用順序只是被部分規(guī)定,每次生成有可能會(huì)有變化,從而導(dǎo)致難以發(fā)現(xiàn)的bugs。

            因此,禁止使用class類型的全局變量(包括STL的string, vector等等),因?yàn)樗鼈兊某跏蓟樞蛴锌赡軐?dǎo)致構(gòu)造出現(xiàn)問題。內(nèi)建類型和由內(nèi)建類型構(gòu)成的沒有構(gòu)造函數(shù)的結(jié)構(gòu)體可以使用,如果你一定要使用class類型的全局變量,請使用單件模式(singleton pattern)

            對于全局的字符串常量,使用C風(fēng)格的字符串,而不要使用STL的字符串:

            const char kFrogSays[] = "ribbet";

            雖然允許在全局作用域中使用全局變量,使用時(shí)務(wù)必三思。大多數(shù)全局變量應(yīng)該是類的靜態(tài)數(shù)據(jù)成員,或者當(dāng)其只在.cc文件中使用時(shí),將其定義到不具名命名空間中,或者使用靜態(tài)關(guān)聯(lián)以限制變量的作用域。

            記住,靜態(tài)成員變量視作全局變量,所以,也不能是class類型!

            ______________________________________

            譯者:這一篇主要提到的是作用域的一些規(guī)則,總結(jié)一下:

            1. .cc中的不具名命名空間可避免命名沖突、限定作用域,避免直接使用using提示符污染命名空間;

            2. 嵌套類符合局部使用原則,只是不能在其他頭文件中前置聲明,盡量不要public;

            3. 盡量不用全局函數(shù)和全局變量,考慮作用域和命名空間限制,盡量單獨(dú)形成編譯單元;

            4. 多線程中的全局變量(含靜態(tài)成員變量)不要使用class類型(含STL容器),避免不明確行為導(dǎo)致的bugs。

            作用域的使用,除了考慮名稱污染、可讀性之外,主要是為降低耦合度,提高編譯、執(zhí)行效率。

            Feedback

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2008-07-20 23:17 by spirit
            對下面這句話不是很理解:
            “不要聲明命名空間std下的任何內(nèi)容,包括標(biāo)準(zhǔn)庫類的前置聲明。聲明std下的實(shí)體會(huì)導(dǎo)致不明確的行為,如,不可移植。聲明標(biāo)準(zhǔn)庫下的實(shí)體,需要包含對應(yīng)的頭文件?!?br>能否解釋的更清楚一些?

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2008-07-21 10:13 by Fox
            stl之所以會(huì)將所有實(shí)體的定義和實(shí)現(xiàn)置于std命名空間下,正是為了避免出現(xiàn)命名沖突(string\map\vector\list等等),如果使用了using或前置聲明之類,效果等同于將其納入當(dāng)前命名空間,所以說會(huì)導(dǎo)致不明確的行為,命名沖突、不可移植,不知道你同意否?

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2008-07-21 20:42 by skybird
            解釋的還算明白,可以補(bǔ)充下,不聲明的結(jié)果就是使用的時(shí)候要明示所在命明空間,如 std::string ,這樣做呢,就是麻煩而已,不過避免了不可預(yù)知的沖突,除非你對std里的所有都系都了如指掌:)

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2010-03-05 22:04 by Horne30Lynda
            Did you ever know that the famous essay writing service could complete the <a href="http://www.supremeessays.com/map.html">sitemap</a> of perfect quality, hence this became worth to buy term papers at that place.

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2010-04-05 21:32 by ringtones
            People guess that the free downloadable ringtones should be available in the ringtones services and this is truth.

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2010-05-13 14:31 by Supra shoes
            <P>The <A title="Supra shoes" href="http://www.supramvp.com/supra-strapped-ns-c-5.html"><STRONG>Supra Strapped NS</STRONG></A> shoes are one of the top skateboarding shoes on the block. </P>It is a good chance for you to buy now .Nowadays ,we published a new kind of <A title="Air Jordan" href="http://www.jordanmvp.com/"><EM>Air Jordan</EM></A> ,that is the <EM>Air Jordan Force line</EM> .They are so good that when you see it , you will like it and are willing to own

            # WTY  回復(fù)  更多評論   

            2010-08-05 09:40 by cosplay
            @Supra shoes

            # [Translation] Google C + + programming style guidelines (b)  回復(fù)  更多評論   

            2010-10-21 14:24 by TermPapers
            The Google C + + programming style guidelines is a really good thing for so many peoples who wants to know about the C + + and the the style guidelines is really a thing which is new and having the information about it is really wounder full.

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2010-10-27 04:07 by asd
            <a href="http://www.pokerenfrancais.eu/">poker ligne</a> - it's your first step to rich and beautiful life.

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2011-01-04 18:25 by Watch Online

            Thanks for a nice post you have given to us with such an large collection of information. Great work you have done by sharing them to all.

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2011-03-16 11:53 by Designer Handbags
            Generally, artist handbags are accessible in various colors, so when you ever locate a design you like but would favor another color, just click the image and see what's available.

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2011-03-21 17:08 by wholesale replica handbags
            A good certainly false Louis Vuitton is often a back-firer. That's the reason you'll want to consider excellent reproduction shopping bags which function its name in addition to objective from good price ranges.

            # great  回復(fù)  更多評論   

            2011-04-10 10:46 by Ralph Lauren Polo Shirts
            Even although Ralph Lauren is known mostly for his revolutionary clothes styles, he can be considered a pretty successful and respected figure in the fragrance industry.

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2011-05-04 08:46 by herve leger london
            This is very interesting. I actually enjoy your writing style and your word choice more than anything Smile

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2011-05-05 14:07 by air max 90
            thank you for the informative post and keep up the good work

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2011-05-07 14:46 by ray ban aviator
            Good work, always enjoy reading your stuff

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2011-05-09 14:10 by Givenchy jewelry
            Of all the couture houses Givenchy is the one that continually produces the most awe-inspiring collections in my eyes at least.

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2011-05-12 14:33 by chaussures air max

            cc~~~~~


            J'ai passé ... Continuer ...

            mais je vous remercie pour votre partage ^o^

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2011-05-13 11:33 by maison martin margiela
            n his first winter collection, displayed in 1988, shards from broken plates had been worked into shirts.

            # re: 重寫atoi函數(shù)  回復(fù)  更多評論   

            2011-10-11 11:35 by north face sale
            聲明std下的實(shí)體會(huì)導(dǎo)致不明確的行為

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2012-02-15 11:43 by shox pas cher
            這是一個(gè)非常好的博客,教會(huì)我很多,謝謝分享、

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2012-03-13 04:50 by phone number lookup
            本文闡述了一個(gè)主題,我以為我知道一切關(guān)于一些新的光。我喜歡閱讀新的觀點(diǎn)和對事物,喜歡讀書,寫在這里。讓我們來看看本網(wǎng)站所提供的!

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2012-03-18 16:58 by Buy a Custom Essay
            Do you have samples of custom writing frauds? University students who are going to to Buy Essay Papers should acknowledge which term papers writing provider to choose.

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2012-03-18 17:02 by essay writing
            I do know that people have to know about this good post and essay writing. At the term paper writing services it is really easy to buy pre-finished essays and custom essay just about this good post.

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2012-04-12 14:08 by abercrombie fitch
            Buen trabajo, siempre disfruto leyendo tus cosas

            # re: [譯]Google C++編程風(fēng)格指南(二)  回復(fù)  更多評論   

            2012-07-02 06:41 by buy an essay online
            View this home page if you wish to purchase essays from the recommended organisation. You will definitely be satisfied with perfect essays writing.
            久久精品国产亚洲Aⅴ蜜臀色欲| 国产精品青草久久久久婷婷| 国产精品99久久久久久www| 久久最新精品国产| 中文字幕无码久久久| 99精品久久精品| 中文字幕久久亚洲一区| 精品久久香蕉国产线看观看亚洲 | 精品久久久无码中文字幕| 国产精品亚洲综合久久| 99久久无色码中文字幕 | 97久久精品无码一区二区天美| 免费观看成人久久网免费观看| 一本色道久久88综合日韩精品| 精品国产一区二区三区久久| 婷婷国产天堂久久综合五月| 亚洲成色999久久网站| 久久亚洲中文字幕精品有坂深雪 | 久久亚洲国产成人影院| 色成年激情久久综合| 蜜臀av性久久久久蜜臀aⅴ麻豆| 久久性精品| 国产成人精品久久亚洲高清不卡| 蜜臀久久99精品久久久久久小说| 亚洲国产日韩欧美综合久久| 亚洲成色999久久网站| www.久久精品| 999久久久免费精品国产| 国色天香久久久久久久小说| 亚洲欧美日韩精品久久亚洲区| 一本一道久久精品综合| 狠狠久久亚洲欧美专区| 久久99国产综合精品女同| 日韩精品久久无码人妻中文字幕 | 国产精品久久久天天影视香蕉| 久久久久亚洲AV片无码下载蜜桃| 久久精品国产久精国产果冻传媒| 欧美久久亚洲精品| 亚洲性久久久影院| 伊人久久无码精品中文字幕| 少妇被又大又粗又爽毛片久久黑人|