Daily bit(e) C++. cv- и ref-квалифицированные функции-члены
Добавлено 12 августа 2026 в 08:37
Daily bit(e) C++ 69, добавление квалификаторов const/volatile и ссылки (reference) к функциям-членам.

Функции-члены в C++ могут быть cv-квалифицированы, что позволяет вызывать функцию-член для объекта с соответствующими cv-квалификаторами.
Функции-члены также могут быть ref-квалифицированы, чтобы различать вызов для lvalue-объекта или rvalue-объекта.
Предоставление полного набора методов с квалификаторами cv и ref может привести к большому дублированию, которое можно устранить с помощью функции C++23 «явный параметр объекта» / «вывод this».
#include <utility>
#include <print>
struct Qualified
{
void operation() { /* без квалификаторов */ }
void operation() const { /* const */ }
void operation() volatile { /* volatile */ }
void operation() const volatile { /* const + volatile */ }
};
struct MyClass
{
void operation() & { /* изменяемое lvalue */ }
void operation() && { /* rvalue: prvalue или xvalue */ }
void operation() const& { /* неизменяемое lvalue */ }
// комбинации с volatile и const&& также возможны
};
Qualified x;
x.operation(); // без квалификаторов
std::as_const(x).operation(); // const
volatile Qualified y;
y.operation(); // volatile
std::as_const(y).operation(); // const + volatile
MyClass a;
a.operation(); // изменяемое lvalue
std::as_const(a).operation(); // const
MyClass{}.operation(); // prvalue
std::move(a).operation(); // xvalue
