Não funções de membro estático sem ref-qualificador

Este é um seguimento do meu post anterior

Com referência ao Não-funções de membro estático

Sob

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

Para explorar ainda mais, eu tentei com o código-fonte fornecido no link acima, como mostrado abaixo:

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

Eu tenho prestado relevantes comentários acima de cada função de membro não estático sobrecarga baseada no qualificador de referência, destacando-se o problema de compilação que iria acontecer se apenas que determinada sobrecarga eram para ser habilitado, no modo de exibição de código-fonte em main().

A minha pergunta é, o que está acontecendo sob os capuzes para não-qualificado ref função de membro não estático para ser capaz de ser agnóstico para implícito do tipo do objeto sobre o qual foi invocado? O compilador passo com o apropriado sobrecarga?

Aprecio os seus pensamentos.

+2
2019-09-17 08:21:34
origem
1 respostas

Você precisa inicializar addr_len para o tamanho do addr.

Se você olhar a página de manual para aceitar, sob listados errno valores; EINVAL para addrlen é inválido (e. g. é negativo)

(soprado mente): ele não é o mesmo de argumentos.

Você está chamando malloc() que pode retornar a memória não inicializada.

Qualquer que seja o valor addrlen para quantos bytes do endereço pode ser copiado para o endereço; 0 significa nenhum.

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

Veja mais perguntas por marcas