народ, объясните мне, что означает запись
class Класс {
public:
void Метод() const volatile &;
};
а то яндекс херь выдаёт?
Нет, const понятно. volatile можно догадаться по аналогии с const — this будет типа const volatile. но что значит амперсанд? const volatile & ?
я когда эту запись увидел, у меня глаз задёргался и возникло ощущение, что я ещё из c++98 не выбрался.
Здравствуйте, Molchalnik, Вы писали:
M>M> void Метод() const volatile &;
M>
M>Нет, const понятно. volatile можно догадаться по аналогии с const — this будет типа const volatile. но что значит амперсанд? const volatile & ?
Перегрузка для lvalue. Смотри
const-, volatile-, and ref-qualified member functions
Здравствуйте, 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;
то в обоих случаях вызовется именно она