Home >Backend Development >C++ >C Member Functions: What Do `&` and `&&` Mean in Parameter Lists?
When declaring member functions in C , one may encounter the use of & and && symbols after the parameter list. These symbols, known as ref-qualifiers, indicate the reference type of the implicit object parameter.
The single ampersand (&) signifies that the member function will be invoked when the object is an lvalue reference. An lvalue reference refers to an existing object stored at a particular memory location. The following code snippet demonstrates its usage:
class wrap { public: operator obj() const & { ... } operator obj() && { ... } private: obj data_; };
The operator obj() function with the & ref-qualifier will be invoked when the object is an lvalue reference. This means it can be called using both lvalue and rvalue expressions.
In the absence of a ref-qualifier, the implicit object parameter is treated as an lvalue reference. This allows the member function to be invoked with both lvalue and rvalue expressions. The code below showcases this behavior:
struct foo { void bar() {} }; int main() { foo().bar(); // (always fine) foo f; f.bar(); // (always fine) }
The && ref-qualifier indicates that the member function will be invoked when the object is an rvalue reference. An rvalue reference refers to a temporary or expression-evaluated object that cannot be bound to a specific memory location.
The following table summarizes the differences between the single ampersand (&) and no ampersand:
Ref-Qualifier | Reference Type | Can be Invoked With |
---|---|---|
& | lvalue reference | lvalue and rvalue expressions |
None | lvalue reference | lvalue and rvalue expressions |
Understanding these ref-qualifiers is crucial for correctly implementing member functions and tailoring their behavior based on the context.
The above is the detailed content of C Member Functions: What Do `&` and `&&` Mean in Parameter Lists?. For more information, please follow other related articles on the PHP Chinese website!