Как читать этот оператор С++
В настоящее время я просматриваю С++ primer Plus от Prata и натолкнулся на это утверждение относительно * этого указателя:
const Stock &topval(const Stock &s) const;
Предоставление этого запаса - класс и верхняя часть функции,
Как вы читаете это утверждение?
Я попытался использовать подход по часовой стрелке/спирали, но меня путают все константы.
Я считаю, что понять, как читать это, позволит мне лучше понять концепцию, которую она пытается доказать.
Спасибо!
Ответы
Ответ 1
topval( ) // topval is a member function...
const; // In which *this is const...
const Stock &s // Taking in a reference
// to a const Stock...
const Stock & // And returning a reference
// to a const Stock.
Ответ 2
Это функция, которая принимает и возвращает ссылку на const
Stock
(не обязательно одну и ту же, чтобы быть ясной), и не мутирует this
, когда она это делает.
Ответ 3
В конце const
применяется указатель this
. Параметр const
в аргументе применяется к аргументу, а const
в первой части предложения к возвращаемому значению.
упрощенное объяснение синтаксиса
Return value - function name - ( argument list ) - const modifier.
Спецификатор const - это модификатор функции, указывающий, что указатель, переданный этой функции, является константой, поэтому вы не можете изменять переменные-члены, кроме тех, которые объявлены mutable в определении класса.
Разработанный синтаксис:
noptr-declarator ( parameter-list ) cv(optional) ref(optional) except(optional) attr(optional) -> trailing require
Поэтому вы объявляете метод, который
Возвращает ссылку const
на Stock
после получения в качестве входной ссылки const
объекта Stock
, а указатель this
- это указатель const для вызываемого метода.
Неиспользуемый, но эквивалентный и допустимый правильный способ написать это
Stock const &topval( Stock const &s) const;
Теперь это позволяет определить, где на самом деле применяется cv-квалификатор (т.е. слева от определителя)
Ответ 4
Он объявляет функцию-член (из-за последнего const
), который:
-
Именовано topval
-
Не меняйте ни одного другого члена класса, см. последний const
-
Принимает только один параметр: const Stock& s
-
Возвращает значение типа const Stock&
Ответ 5
Было бы намного легче, если бы люди написали этот код разумно:
const Stock& topval(const Stock& s) const;
topval
является функцией const
, беря const Stock&
, называемую s
, и возвращает a const Stock&
.
Simple!
Ответ 6
const Stock &topval( const Stock &s) const;
Итак, вы объявляете функцию topval, которая возвращает адрес памяти для объекта типа Stock as const. Функция topval принимает в качестве аргумента адрес памяти объекта Stock. Поскольку это const, вы не сможете изменить этот объект внутри topval.
Наконец, const в конце означает, что эта функция (topval) не сможет изменить каких-либо членов класса Stock.
Я думаю, что это более или менее этот смысл, это было какое-то время без С++