2012-05-22 11 views
1

在C++類中,我們可以用兩種樣式中的任何一種編寫我們的成員。我們可以將它們放在命名空間塊中,或者我們可以完全限定每個塊。在編寫C++成員定義時,是否有理由更喜歡將它們放入命名空間塊中以完全限定它們,反之亦然?

有什麼理由更喜歡一種風格嗎?

頭文件看起來像這樣(bar.h):

namespace foo 
{ 
    class Bar 
    { 
    public: 
     Bar(); 
     int Beans(); 
    }; 
} 

樣式1(bar.cpp) - 命名空間塊內聲明:

#include "bar.h" 
namespace foo 
{ 
    Bar::Bar() 
    { 
    } 

    int Bar::Beans() 
    { 
    } 
} 

風格2(巴。 cpp) - 完全合格聲明

#include "bar.h" 

foo::Bar::Bar() 
{ 
} 

int foo::Bar::Beans() 
{ 
} 

所以我的問題是:有什麼理由更喜歡一種風格而不是另一種風格?

+2

個人喜好,另一級別的縮進,更多/更少的打字...沒什麼技術性的。 –

+0

@很明顯,這個問題乍一看似乎相似,但實際上完全不同。另一方面, – Boinst

+0

[this one](http://stackoverflow.com/q/6984444/385094)非常相似。 – Boinst

回答

0

以下是James Kanze在回答another similar question時發佈的可能答案。 (編輯:註釋,來自評論帖子,這僅適用於非會員功能)

喜歡完全限定的形式(樣式2)。

用這種風格寫的函數顯式定義,而不是聲明。

也就是說,如果使用樣式2,如果您意外地定義了一個帶有不正確參數的函數,那麼會出現一個編譯器錯誤,提醒您該事實。

使用樣式1,如果您定義了一個具有不正確參數的函數,它將定義一個不同的函數。它會很好的編譯,但是你會得到一個鏈接器錯誤,說明這個方法沒有被定義。這可能比Style 2的編譯器錯誤更難診斷。

+1

這隻適用於非成員函數。如果你嘗試使用樣式#1或者樣式#2來定義一個帶有錯誤參數的成員函數,那麼你肯定會得到一個編譯器錯誤。 –

+0

謝謝@SethCarnegie。 – Boinst

相關問題