Это легче понять, если переписать его как полностью эквивалентный
// v───v───v───v───v───v───v───v───v───v───v───v─┬┐
// ││
// v──#1 v─#2 v──#3 v─#4 #5
int const * const Method3(int const * const&) const;
затем прочитайте его справа налево.
# 5 говорит, что полное объявление функции слева - const
, что означает, что это обязательно функция-член, а не свободная функция.
# 4 говорит, что указатель слева - const
(нельзя изменить, чтобы он указывал на другой адрес).
# 3 говорит, что int
слева - const
(нельзя изменить на другое значение).
# 2 говорит, что указатель слева - const
.
# 1 говорит, что int
слева - const
.
Собрав все это вместе, вы можете прочитать это как const
функцию-член с именем Method3
, которая принимает ссылку на const
указатель на int const
(или const int
, если вы предпочитаете) и возвращает указатель const
на int const
(const int
).
(N.b. # 2 совершенно лишнее .)