我有以下代碼:Const之前或之後的類型?
string const& operator[] (size_t index) const { return elems[index]; }
豈不是:
const string&
?
我有以下代碼:Const之前或之後的類型?
string const& operator[] (size_t index) const { return elems[index]; }
豈不是:
const string&
?
cv修飾符像const
適用於任何對他們的左側,除非有什麼,在這種情況下,他們申請的權利。對於string const&
,const
適用於其左側的string
。對於const string&
,const
適用於其右側的string
。也就是說,它們都是對const
string
的引用,所以在這種情況下,它沒有區別。
有些人喜歡把它左邊(如const int
),因爲它讀取由左到右。有些人喜歡把它右邊(如int const
)避免使用特殊情況(int const * const
比const int* const
較爲一致,例如)。
它工作在這種情況下無論哪種方式,並且是個人喜好和編碼規範的問題。
一些程序員更喜歡在之後輸入的類型名稱,以便與const
的其他用途更加一致。例如,如果你聲明的指針在指針本身(而不是指向的類型)是要const
,你需要把它星號後:
string * const ptr;
同樣,如果你是聲明一個const
成員函數,它需要在函數聲明之後去;例如:
class Foo
{
void func() const;
};
的const
可以是對數據類型,以便的任一側:
「const int *
」是一樣的「int const *
」
「const int * const
」是一樣的「int const * const
」
int *ptr; // ptr is pointer to int
int const *ptr; // ptr is pointer to const int
int * const ptr; // ptr is const pointer to int
int const * const ptr; // ptr is const pointer to const int
int ** const ptr; // ptr is const pointer to a pointer to an int
int * const *ptr; // ptr is pointer to a const pointer to an int
int const **ptr; // ptr is pointer to a pointer to a const int
int * const * const ptr; // ptr is const pointer to a const pointer to an int
基本規則是const applies to the thing left of it. If there is nothing on the left then it applies to the thing right of it.
這裏沒有什麼區別。 – Rapptz
以最純粹的形式,應該保持一致。它可以在左邊的事實是例外,真的。這就是說,我個人更喜歡離開。 – chris
我認爲如果你把它放在正確的位置,讀取類型名稱會更容易,但它沒有區別。 – Simple