отстал я от плюсов: квалификаторы метода
От: Molchalnik  
Дата: 08.11.19 02:53
Оценка: :)
народ, объясните мне, что означает запись
class Класс {
 public:
  void Метод() const volatile &;  
};

а то яндекс херь выдаёт?

Нет, const понятно. volatile можно догадаться по аналогии с const — this будет типа const volatile. но что значит амперсанд? const volatile & ?

я когда эту запись увидел, у меня глаз задёргался и возникло ощущение, что я ещё из c++98 не выбрался.
Re: отстал я от плюсов: квалификаторы метода
От: AndrewJD США  
Дата: 08.11.19 03:18
Оценка: 1 (1) +1
Здравствуйте, Molchalnik, Вы писали:

M>
M>  void Метод() const volatile &;  
M>


M>Нет, const понятно. volatile можно догадаться по аналогии с const — this будет типа const volatile. но что значит амперсанд? const volatile & ?


Перегрузка для lvalue. Смотри const-, volatile-, and ref-qualified member functions
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re: отстал я от плюсов: квалификаторы метода
От: digul0  
Дата: 08.11.19 05:06
Оценка: 7 (3) +2
Здравствуйте, Molchalnik, Вы писали:

M>народ, объясните мне, что означает запись

M>
M>class Класс {
M> public:
M>  void Метод() const volatile &;  
M>};
M>

M>а то яндекс херь выдаёт?

M>Нет, const понятно. volatile можно догадаться по аналогии с const — this будет типа const volatile. но что значит амперсанд? const volatile & ?


M>я когда эту запись увидел, у меня глаз задёргался и возникло ощущение, что я ещё из c++98 не выбрался.



Читай как без амперсанда.
Это C++11 фича когда ввели r-value значения.
void Метод() const volatile &; — перегрузка для l-value (ака обычная ссылка).
void Метод() const volatile &&; — перегрузка для r-value (ака ссылка на временный объект).
Так при условии что обе версии метода определены:
  Class a;
  a.Метод();

Вызовет l-value версию
  Class().Метод(); //Class() - временный объект, который после вызова метода будет уничтожен

Вызовет r-value версию.
Если определена только
void Метод() const volatile;

то в обоих случаях вызовется именно она
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.