[英]c++ meaning of the use of const in the signature
請幫我理解以下簽名:
err_type funcName(const Type& buffer) const;
所以對於第一個const,這是否意味着Type的內容不能改變或者引用不能改變?
其次,第二個const是什么意思? 我甚至都沒有暗示。
在此先感謝,jbu
第二個const意味着可以在const對象上調用該方法。
考慮這個例子:
class foo
{
public:
void const_method() const;
void nonconst_method();
};
void doit()
{
const foo f;
f.const_method(); // this is okay
f.nonconst_method(); // the compiler will not allow this
}
此外,不允許const方法更改對象的任何成員(除非該成員被特別標記為可變):
class foo
{
public:
void const_method() const;
private:
int r;
mutable int m;
};
void foo::const_method() const
{
m = 0; // this is okay as m is marked mutable
r = 0; // the compiler will not allow this
}
是的,第一個const
表示buffer
無法更改。
第二個const
意味着這是一個類的成員函數,並且不會更改對象( this
)。
這將比我們大多數人解釋得更好,所以我不會重復: http : //www.parashift.com/c++-faq-lite/const-correctness.html
直接:它表示const適用於調用該方法的實例。 您不能在非const對象上調用它。
const規則: const關鍵字修改左邊的東西,除非什么都沒有,在這種情況下它會修改它的右邊的東西。
因此,類型“const int”是一種特殊情況,與“int const”的含義相同。
將規則應用於方法時,您將獲得“<method> const”。 (這是一種延伸,但仍然有助於理解這種方式。)
其他示例(“從里到外讀取”),其中“id”是標識符,但可以在不更改類型的情況下刪除:
int const* id
=指向常量int的指針 int* const id
=指向int的常量指針 int const id[5]
= 5x常量int的數組 int (*const id)[5]
=指向5x int數組的常量指針 更常見的是, T const&
和T const*
被一些人使用,因為它通過不需要特殊情況來保持一致性。 我更喜歡它,因為一開始的類型通常比知道它的常量更有幫助。
其他答案是正確的,但它具有更重要的意義。 這是你班級的合同,“通過調用此函數,你不會改變你的對象的狀態”。 人們對此有不同的解釋,有些人認為對象不會改變調用者的外觀,而有些人則認為對象在調用此函數時根本不會改變。
第一個const
是保證函數不會改變buffer
,因此可以傳遞一個const緩沖區。
第二個const
僅在用作類的方法時才有意義。 保證調用該方法對包含該方法的類沒有任何副作用。 本質上是一個保證,可以在const
對象上安全地調用此方法。
雖然你已經得到了一些好的答案,但我認為有必要指出一個類可以包含mutable
成員變量。 mutable
成員是您總是被允許修改的成員,即使它是const對象的一部分。 這些通常用於記憶和緩存之類的事情,其中變量可以被修改而不會影響整個對象的用戶可見狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.