Нестатические функции-члены с не реф-классификатор
Это продолжение моего предыдущего поста
Со ссылкой на нестатические функции-члены
Под
const-, volatile-, and ref-qualified member functions
A non-static member function can be declared with no ref-qualifier,... During overload resolution, non-static cv-qualified member function of class X is treated as follows:
no ref-qualifier: the implicit object parameter has type lvalue reference to cv-qualified X and is additionally allowed to bind rvalue implied object argument
Чтобы исследовать это далее, я экспериментировал с исходным кодом в ссылке выше, как показано ниже:
#include <utility>
#include <iostream>
using std::move;
using std::cout;
using std::endl;
struct S {
void f() {cout << "no ref-qualifier: the implicit object parameter has type lvalue reference to cv-qualified S and is additionally allowed to bind rvalue implied object argument\n"; }
//if only the below method signature were to be enabled,
//the invocations using rvalue implicit object would fail
//to compile with the error [-fpermissive]
//void f() & {cout << "lvalue\n"; }
//if only the below method signature were to be enabled,
//the invocation using lvalue implicit object would fail
//to complile with the error [-fpermissive]
//void f() && {cout << "rvalue\n"; }
};
int main (void){
S s;
s.f(); // prints "lvalue"
move(s).f(); // prints "rvalue"
S().f(); // prints "rvalue"
return 0;
}
Я предоставил соответствующие комментарии над каждой нестатической функции-члена от перегрузки на основе классификатор ссылки, выделяя выпуск сборника, который наступит, если только к этому конкретному перегрузки должны были быть включены, учитывая исходный код в .
На мой вопрос, что происходит под капюшонами, чтобы не реф не статическую функцию-член, чтобы быть агностиком с неявным типом объекта, на который он был вызван? Делает шаг компилятор с соответствующими перегрузки?
Ценю ваши мысли.
Вы должны инициализировать addr_len
на размер в.
Если вы посмотрите на странице справочника принимать, согласно перечисленной начений S; Если является недействительным (электронная. г. отрицательно)
(перегоревший ум): это не одни и те же аргументы.
Вы призываете , которая может вернуть неинициализированной памяти.
Независимо от значения addrlen
на сколько байт адреса могут быть скопированы в адрес; 0 означает никто.
Посмотрите другие вопросы по меткам c++11 methods overloading non-static