"C ++ Primer" lendo notas - Capítulo 03 tipo de retorno e instrução de retorno

Autor: Ma Zhifeng
link: https: //zhuanlan.zhihu.com/p/23782715
Fonte: sabe quase com
direitos autorais do autor. Para reimpressões comerciais, entre em contato com o autor para autorização. Para reimpressões não comerciais, indique a fonte.

declaração:

  • O conteúdo do artigo foi coletado e compilado do "C ++ Primer Chinese Edition (5ª edição)", e os direitos autorais pertencem ao livro original.
  • O livro original tem interpretações mais detalhadas e maravilhosas, por favor, compre livros genuínos para aprender.
  • Este artigo é apenas para aprendizagem e comunicação, qualquer forma de reimpressão é proibida

A forma de devolver um valoréexatamente igual à forma de inicializar uma variável ou parâmetro formal

O valor de retorno para uma quantidade temporária de ponto de inicialização da chamada, a quantidade temporária é o resultado da chamada de função

Não retorne referências ou ponteiros para objetos locais

const string &manip()  
{  
    string ret;  
    if( !ret.empty() )  
    {  
        return ret;  
    }  
    else  
    {  
        return "Empty";  
    }  
}

Os dois retornos acima estão errados

  • ret é uma variável local, é destruída após a execução da função, por isso não pode ser referenciada
  • "Vazio" será usado para inicializar uma quantidade temporária do site de chamada, a quantidade temporária é o resultado da chamada de função, da mesma forma, não podemos nos referir a uma quantidade temporária

Acesso direto de membro

Se a função retornar um ponteiro, referência ou objeto de classe, você pode usar o resultado da chamada de função para acessar os membros do objeto de resultado

auto sz = shortString( s1, s2 ).size();
  • Por um lado, está relacionado à precedência e associatividade do operador de chamada
  • Por outro lado, deveria ter algo a ver com o valor provisório, no meu entendimento é que o membro visita o valor provisório, correto?

Referência retorna lvalue

Se a função retornar um objeto do tipo de referência, você pode atribuir diretamente o resultado da chamada da função

getVal( s, 0 ) = 'A';

Na verdade, atribua um valor ao objeto vinculado pela referência

Inicialização da lista

vector<string> process()  
{  
    return {"Hi", "bye"};  
}

Usamos isso quando escovamos Leetcode 01

valor de retorno do principal

Se a função principal não escrever uma instrução de retorno, o compilador adicionará automaticamente uma instrução de retorno
que retorna 0 para nós, mas é recomendado adicionar

Recursão

Função autodenominada

int fac( int val )  
{  
    if( val > 1 )  
    {  
        return fac( val - 1 ) * val;  
    }  

    reutrn 1;  
}

Deve haver um if, para garantir que haja um caminho que não inclua chamadas recursivas, caso contrário, ele terminará em um loop infinito

Retornar ponteiro de array

Como os arrays não podem ser copiados, as funções não podem retornar arrays. Mas você pode retornar um ponteiro ou referência a um array

Lembre-se da definição anterior de ponteiro para array

int (*p2)[10] = &arr;

Declarar uma função que retorna um ponteiro de array também é complicado

Type (*function(parameter_list)[dimension]

Mas a forma é semelhante à definição de um ponteiro para um array

int (*func(int i))[10];

Esta forma de escrever é inevitavelmente um pouco complicada e é fácil cometer erros. Temos três maneiras de simplificar

  • Digite o alias
  • Tipo de retorno de cauda
  • decltype

Digite o alias

typedef int arrT[10];  
arrT *func( int i );

Tipo de retorno de cauda

C ++ 11 novo padrão

auto func( int i ) -> int(*)[10];

decltype

int odd[] = { 1, 3 };  
int even[] = { 2, 4 };  

decltype(odd) *arrPtr( int i )  
{  
    i;  
    return &odd;  
}

Não é difícil ver que este método tem uma gama limitada de uso

Acho que você gosta

Origin blog.csdn.net/qq_26751117/article/details/53233458
Recomendado
Clasificación