青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Creative Commons License
本Blog采用 知識共享署名-非商業性使用-禁止演繹 3.0 Unported許可協議 進行許可。 —— Fox <游戲人生>

游戲人生

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

[譯]Google C++編程風格指南(二)

Posted on 2008-07-14 15:49 Fox 閱讀(7776) 評論(27)  編輯 收藏 引用 所屬分類: T技術碎語

原文地址:

  • 作用域

1. 命名空間(Namespaces)

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

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

優點:命名空間提供了(可嵌套)命名軸線(name axis,譯者注:將命名分割在不同命名空間內),當然,類也提供了(可嵌套)的命名軸線(譯者注:將命名分割在不同類的作用域內)。

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

缺點:命名空間具有迷惑性,因為它們和類一樣提供了額外的(可嵌套的)命名軸線。在頭文件中使用不具名的空間容易違背C++的唯一定義原則(One Definition Rule (ODR))。

結論:根據下文將要提到的策略合理使用命名空間。

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

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

namespace {                                   // .cc 文件中

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

}  // namespace

然而,與特定類關聯的文件作用域聲明在該類中被聲明為類型、靜態數據成員或靜態成員函數,而不是不具名命名空間的成員。像上文展示的那樣,不具名命名空間結束時用注釋// namespace標識。

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

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

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

命名空間將除文件包含、全局標識的聲明/定義以及類的前置聲明外的整個源文件封裝起來,以同其他命名空間相區分。

// .h文件
namespace mynamespace {

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

}  // namespace mynamespace

// .cc文件
namespace mynamespace {

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

}  // namespace mynamespace

通常的.cc文件會包含更多、更復雜的細節,包括對其他命名空間中類的引用等。

#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下的任何內容,包括標準庫類的前置聲明。聲明std下的實體會導致不明確的行為,如,不可移植。聲明標準庫下的實體,需要包含對應的頭文件。

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

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

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

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

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

// 允許:.cc文件中
// .h文件中,必須在函數、方法或類的內部使用

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

2. 嵌套類(Nested Class)

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

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

class Foo {

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

};

優點:當嵌套(成員)類只在被嵌套類(enclosing class)中使用時很有用,將其置于被嵌套類作用域作為被嵌套類的成員不會污染其他作用域同名類。可在被嵌套類中前置聲明嵌套類,在.cc文件中定義嵌套類,避免在被嵌套類中包含嵌套類的定義,因為嵌套類的定義通常只與實現相關。

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

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

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

使用命名空間中的非成員函數或靜態成員函數,盡量不要使用全局函數。

優點:某些情況下,非成員函數和靜態成員函數是非常有用的,將非成員函數置于命名空間中可避免對全局作用域的污染。

缺點:將非成員函數和靜態成員函數作為新類的成員或許更有意義,當它們需要訪問外部資源或具有重要依賴時更是如此。

結論:

有時,不把函數限定在類的實體中是有益的,甚至需要這么做,要么作為靜態成員,要么作為非成員函數。非成員函數不應依賴于外部變量,并盡量置于某個命名空間中。相比單純為了封裝若干不共享任何靜態數據的靜態成員函數而創建類,不如使用命名空間。

定義于同一編譯單元的函數,被其他編譯單元直接調用可能會引入不必要的耦合和連接依賴;靜態成員函數對此尤其敏感。可以考慮提取到新類中,或者將函數置于獨立庫的命名空間中。

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

4. 局部變量(Local Variables)

將函數變量盡可能置于最小作用域內,在聲明變量時將其初始化。

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

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

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

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

注意:如果變量是一個對象,每次進入作用域都要調用其構造函數,每次退出作用域都要調用其析構函數。

// 低效的實現
for (int i = 0; i < 1000000; ++i) {
  Foo f;  // 構造函數和析構函數分別調用1000000次!
  f.DoSomething(i);
}

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

Foo f;  // 構造函數和析構函數只調用1次
for (int i = 0; i < 1000000; ++i) {
  f.DoSomething(i);
}

5. 全局變量(Global Variables)

class類型的全局變量是被禁止的,內建類型的全局變量是允許的,當然多線程代碼中非常數全局變量也是被禁止的。永遠不要使用函數返回值初始化全局變量。

不幸的是,全局變量的構造函數、析構函數以及初始化操作的調用順序只是被部分規定,每次生成有可能會有變化,從而導致難以發現的bugs。

因此,禁止使用class類型的全局變量(包括STL的string, vector等等),因為它們的初始化順序有可能導致構造出現問題。內建類型和由內建類型構成的沒有構造函數的結構體可以使用,如果你一定要使用class類型的全局變量,請使用單件模式(singleton pattern)。

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

const char kFrogSays[] = "ribbet";

雖然允許在全局作用域中使用全局變量,使用時務必三思。大多數全局變量應該是類的靜態數據成員,或者當其只在.cc文件中使用時,將其定義到不具名命名空間中,或者使用靜態關聯以限制變量的作用域。

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

______________________________________

譯者:這一篇主要提到的是作用域的一些規則,總結一下:

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

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

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

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

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

Feedback

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

2008-07-20 23:17 by spirit
對下面這句話不是很理解:
“不要聲明命名空間std下的任何內容,包括標準庫類的前置聲明。聲明std下的實體會導致不明確的行為,如,不可移植。聲明標準庫下的實體,需要包含對應的頭文件?!?br>能否解釋的更清楚一些?

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

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

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

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

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

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++編程風格指南(二)  回復  更多評論   

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++編程風格指南(二)  回復  更多評論   

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  回復  更多評論   

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

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

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++編程風格指南(二)  回復  更多評論   

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++編程風格指南(二)  回復  更多評論   

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++編程風格指南(二)  回復  更多評論   

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++編程風格指南(二)  回復  更多評論   

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  回復  更多評論   

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++編程風格指南(二)  回復  更多評論   

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++編程風格指南(二)  回復  更多評論   

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

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

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

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

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++編程風格指南(二)  回復  更多評論   

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++編程風格指南(二)  回復  更多評論   

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函數  回復  更多評論   

2011-10-11 11:35 by north face sale
聲明std下的實體會導致不明確的行為

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

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

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

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

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

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++編程風格指南(二)  回復  更多評論   

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++編程風格指南(二)  回復  更多評論   

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

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

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.
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品视频在线观看网站| 亚洲自拍偷拍视频| 一区二区免费在线播放| 亚洲第一在线综合网站| 一区二区三区在线免费视频| 激情综合久久| 亚洲国产高清视频| 亚洲欧洲日本在线| 亚洲精品一区二| 一本一道久久综合狠狠老精东影业 | 欧美日韩精品免费在线观看视频| 欧美欧美全黄| 国产精品久久久久一区二区三区共| 国产精品视频自拍| 亚洲高清在线观看| 亚洲一级在线| 久久久精品网| 亚洲精品在线免费| 亚洲欧美三级伦理| 久久综合网络一区二区| 欧美日韩伦理在线| 国产一区二区日韩精品| 日韩一级裸体免费视频| 欧美一级片久久久久久久| 猛男gaygay欧美视频| 99re6热只有精品免费观看| 先锋影音久久| 欧美精品一区二区在线观看| 国产精品国产三级国产专播品爱网| 国产一区二区激情| 亚洲蜜桃精久久久久久久 | 欧美69视频| 亚洲香蕉伊综合在人在线视看| 久久精品国产2020观看福利| 欧美精品午夜| 亚洲成人原创| 欧美怡红院视频| 99精品久久久| 欧美激情成人在线| 1769国内精品视频在线播放| 欧美专区在线观看一区| 9久re热视频在线精品| 欧美成人国产| 国产一区日韩二区欧美三区| 亚洲在线观看| 亚洲精品美女在线观看播放| 性欧美激情精品| 日韩亚洲欧美一区二区三区| 老色鬼精品视频在线观看播放| 国产农村妇女毛片精品久久麻豆 | 国产一二三精品| 午夜精品美女久久久久av福利| 欧美激情第3页| 久久美女性网| 国模精品一区二区三区色天香| 亚洲欧美综合v| 一本色道久久综合一区| 欧美视频在线观看一区| 亚洲免费观看高清完整版在线观看熊 | 午夜精品短视频| 国产精品视频免费观看www| 在线亚洲成人| 99成人在线| 国产精品videosex极品| 一区二区三区视频在线| 亚洲人体大胆视频| 欧美成人免费大片| 亚洲九九九在线观看| 欧美激情一区二区三区成人| 久久久免费精品视频| 尤物九九久久国产精品的特点| 久久久另类综合| 久久精品国产一区二区三区| 激情欧美亚洲| 欧美激情精品久久久久久黑人 | 亚洲毛片网站| av成人免费| 国产精品av免费在线观看 | 在线免费精品视频| 亚洲国产日韩欧美在线动漫| 欧美精品一区二区在线播放| 亚洲一区二区精品在线| 亚洲欧美bt| 亚洲国产精品www| 99re热精品| 黄页网站一区| 亚洲日本在线观看| 国产精品一级在线| 免费高清在线视频一区·| 久久久免费av| 99视频精品全部免费在线| 亚洲一区二区三区涩| 在线不卡视频| 在线视频你懂得一区二区三区| 国产午夜精品理论片a级大结局 | 亚洲综合成人婷婷小说| 国内成人自拍视频| 亚洲欧洲日产国产网站| 国产精品久久久久秋霞鲁丝 | 欧美精品 国产精品| 亚洲制服丝袜在线| 久久久亚洲国产天美传媒修理工 | 激情亚洲网站| 9l国产精品久久久久麻豆| 激情五月婷婷综合| 亚洲视屏在线播放| 亚洲七七久久综合桃花剧情介绍| 亚洲亚洲精品三区日韩精品在线视频| 极品日韩久久| 亚洲午夜一区二区| 亚洲激情网址| 欧美一区二区三区啪啪| 亚洲欧美激情视频在线观看一区二区三区| 久久精品毛片| 久久国产精品99精品国产| 欧美韩日亚洲| 欧美成人一区二区三区| 国产午夜亚洲精品不卡| 一区二区激情| 一区二区欧美国产| 欧美成人精品高清在线播放| 久久久一区二区三区| 国产精品第2页| 99精品欧美一区| 一区二区三区欧美激情| 女同性一区二区三区人了人一 | 99ri日韩精品视频| 久久天天狠狠| 久久久国产精品一区二区中文| 欧美日韩在线精品一区二区三区| 欧美v国产在线一区二区三区| 国产午夜精品一区二区三区视频 | 亚洲欧美日韩国产另类专区| 99精品欧美一区二区三区综合在线| 老司机免费视频一区二区| 久久激情视频| 国产亚洲欧美一区在线观看| 亚洲影视九九影院在线观看| 亚洲午夜精品久久| 国产精品白丝黑袜喷水久久久| 一个色综合av| 午夜精品在线观看| 国产精品视频免费在线观看| 亚洲午夜电影在线观看| 中国亚洲黄色| 国产精品国产福利国产秒拍 | 欧美精品在线观看| 亚洲精品午夜| 国产欧美精品一区二区三区介绍 | a91a精品视频在线观看| 中文欧美字幕免费| 国产精品日韩欧美一区| 亚洲欧美日韩在线播放| 久久精品日韩欧美| 亚洲二区在线观看| 欧美日韩国产精品一卡| 亚洲一区二区三区四区中文| 亚洲欧美日韩一区二区三区在线| 国产精品一二| 久久精品91| 欧美国产日韩精品| 在线亚洲一区观看| 国产精品一区二区你懂得 | 欧美日韩精品综合在线| 9久re热视频在线精品| 欧美一区二区女人| 亚洲国产精品美女| 欧美性色视频在线| 性色av一区二区三区在线观看| 农村妇女精品| 亚洲一区二区三区激情| 国产日韩欧美视频在线| 毛片一区二区三区| 中国日韩欧美久久久久久久久| 久久国产精品久久精品国产| 亚洲二区在线| 国产精品一区在线观看你懂的| 久久影院午夜论| 亚洲香蕉在线观看| 欧美激情欧美激情在线五月| 亚洲综合久久久久| 亚洲成人在线视频网站| 国产精品海角社区在线观看| 久久―日本道色综合久久| 在线亚洲欧美专区二区| 欧美成人久久| 久久精品国产99国产精品| 夜夜嗨av一区二区三区| 一区在线免费| 国产精品日韩一区二区| 理论片一区二区在线| 亚洲直播在线一区| 亚洲精品1234| 女生裸体视频一区二区三区| 午夜精品久久久99热福利| 日韩一区二区精品葵司在线| 亚洲国产精品久久久| 樱桃国产成人精品视频| 国产日韩在线视频| 国产精品高潮呻吟久久av黑人 |