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.
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.
Veja mais perguntas por marcas c++11 methods overloading non-static