разница между const и статическим ключевым словом в заголовке функции

Рассмотрим следующий код:

class Test
{
public:
//1
int kon1() const;

//2
const int kon2();

//3
static int kon3();
};

Насколько я знаю, разница между функцией 1 и 2 заключается в том, что:

  1. Функция 1 говорит, что функция не сможет изменить значение какого-либо члена данных
  2. Функция 2 говорит, что вернет const int

(Если у меня неправильное понимание, пожалуйста, поправьте меня)

Мой вопрос:
Как мы видим, если мы хотим сделать функцию константной, ключевое слово const помещается позади. Но почему в функции 3 статическая функция, ключевое слово static помещается впереди?

2

Решение

За const функции-члены должны иметь const ключевое слово впоследствии, чтобы избежать неоднозначности с типом возвращаемого значения.

За static, virtual и другие ключевые слова, оказывающие существенное влияние на работу функции, желательно сначала перечислить ее, чтобы ее было легче увидеть в определении класса. Например, мы можем быстро просмотреть список функций-членов и определить все static функции или все virtual те, которые помогают нам понять общее использование функции.

Маркировка функции-члена const (или, например, override) является менее важным различием — если у вас естьconst объект, который вы можете вызывать функции, являются ли они const или нет, соответствующий const-дальности очевидны для читающего разработчика, так как они воспринимают возвращаемый тип функции и идентификатор, а в некоторых корпоративных / проектных стандартах кодирования функции сгруппированы выше constили const и неconst версии одной и той же функции-члена расположены рядом друг с другом, чтобы подчеркнуть их сходство. const-несс выделяется больше.

Все эти факторы в совокупности делают фактический выбор в C ++ оптимальным для разработки, но вы правы, заметив, что они немного противоречивы.

3

Другие решения

Вы смешиваете две концепции: класс хранения с типом хранения.

C ++ имеет следующий вид классов хранения

авто, регистр, статический, внешний & изменчивый

И следующий тип хранения (в зависимости от того, что вы можете сделать с хранилищем)

только для чтения (можно инициализировать) -> это const

читать и писать -> это не const.

Поэтому, когда вы определяете переменную / функцию, вы должны заранее сказать, какой тип хранилища вы хотите связать. Вот почему вы ставите static в качестве первого ключевого слова в вашем коде.

Надеюсь это поможет.

0

Ключевое слово static не изменяет тип переменной. Он изменяет адрес памяти, в котором он будет расположен. Он используется одинаково для переменных типа функции и для переменных типа данных:

static int n;     // data
static int n ();  // function

Ключевое слово const действительно изменяет тип переменной. Для переменных типа функции это ключевое слово имеет два возможных значения:

  1. изменить возвращаемое значение функции как тип const:

    const int n (); // функция может быть вызвана только из неконстантных объектов и возвращает константное значение

  2. изменить способ вызова этой функции

    int n () const; // функция может быть вызвана как const, так и неконстантными объектами, и возвращает неконстантное значение`

0

 int kon1() const;

Эта функция предназначена только для чтения и предназначена для работы только с постоянными данными.

   const int kon2();

Эта функция может работать с изменяемым объектом, но возвращает тип только для чтения, и вызывающая сторона не может изменить это.

0
По вопросам рекламы [email protected]