Как читать этот оператор С++

В настоящее время я просматриваю С++ 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.

Я думаю, что это более или менее этот смысл, это было какое-то время без С++