Нестатические функции-члены с не реф-классификатор

Это продолжение моего предыдущего поста

Со ссылкой на нестатические функции-члены

Под

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;
}

Я предоставил соответствующие комментарии над каждой нестатической функции-члена от перегрузки на основе классификатор ссылки, выделяя выпуск сборника, который наступит, если только к этому конкретному перегрузки должны были быть включены, учитывая исходный код в .

На мой вопрос, что происходит под капюшонами, чтобы не реф не статическую функцию-член, чтобы быть агностиком с неявным типом объекта, на который он был вызван? Делает шаг компилятор с соответствующими перегрузки?

Ценю ваши мысли.

+2
2019-09-17 08:21:34
источник
1 ответ

Вы должны инициализировать addr_len на размер в.

Если вы посмотрите на странице справочника принимать, согласно перечисленной начений S; Если является недействительным (электронная. г. отрицательно)

(перегоревший ум): это не одни и те же аргументы.

Вы призываете , которая может вернуть неинициализированной памяти.

Независимо от значения addrlen на сколько байт адреса могут быть скопированы в адрес; 0 означает никто.

+0
2019-09-17 10:52:17

Посмотрите другие вопросы по меткам