2012-05-29 2 views
3

новичок здесь!Три "const" в const func (const scalar & a) const, почему?

Я читаю код и я вижу, автор часто пишет функцию-член, как

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

Вы видите, есть три Const здесь, теперь я понимаю, средний, Const скалярной & а, который стремится не измените объект a, но как насчет двух других const?

Является ли это хорошей привычкой, что я должен делать это все время, чтобы защитить блаббах без изменений?

Большое спасибо!

+8

Куда возвращается тип? Это в классе? –

+0

это недопустимо C++ – Philipp

ответ

7

Код, который вы отправили, недействителен, он не будет компилироваться. Тем не менее, если вы считаете

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

Первый const определит, что возвращаемое значение является постоянным (т.е. неизменны). Второй const (const scalar& a) указывает, что функция не изменяет значение значения аргумента a. Третья константа указывает, что 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', что? – Daniel

0

Поскольку никто не упомянул об этом еще: нет абсолютно никакой разницы между

const int some_function(); 

и

int some_function(); 

const на скалярные типы возвращаемых значений (например, int) игнорируется; это имеет значение только для типов классов. related