2012-05-29 72 views
3

新手在這裏!const func(const scalar&a)const中的三個「const」,爲什麼?

我正在讀代碼,我看到作者經常寫一個成員函數作爲

const int func (const scalar& a) const 
// etc 

你看到有三個常量這裏,現在我明白中間的一個,常量標&一個,其目的是不改變對象a,但其他兩個const呢?

我應該一直這樣做,保護blahblah不變是一個好習慣嗎?

非常感謝!

+8

返回類型在哪裏?這是在課堂上嗎? –

+0

這是無效的C++ – Philipp

回答

7

您發佈的代碼無效,無法編譯。但是,如果考慮

class MyClass { 
    const int& func (const scalar& a) const { 
    // ... 
    } 
}; 

第一const將指定的返回值是恆定的(即不可變的)。第二個constconst scalar& a)指定該函數不會修改參數a的值的值。第三個const指定func是一個常量成員函數,即它不修改MyClass實例本身。

+1

這裏的關鍵是每個'const'修改聲明的不同部分,並且每個都有一個目的。 –

+3

這裏更有趣! 'constexpr const char * const&func(const char * const&a)const' –

+0

'constexpr const char * const&func(const char * const&a)const',what? – Daniel

0

由於沒有人提到它尚未:也絕對

const int some_function(); 

int some_function(); 

標量返回類型const之間沒有差別(如int)被忽略;它只對類類型很重要。 related

相關問題