Os inlines em C++

Junho 2017


Significado


A palavra-chave inline é usada em C++ e aplicada a uma função. Ela indica ao compilador que cada chamada para a função inline deve ser substituída pelo corpo desta função. Para gerar um arquivo executável de tamanho razoável, ele é, na realidade, usado para as funções "curtas" em termos de número de instruções.

A palavra-chave inline tem a vantagem de acelerar um programa se este recorre, regularmente, à função inline. Ele pode condensar significativamente o código, especialmente para os assessores de uma classe. Um assessor de classe é, tipicamente, uma função de uma linha.

Exemplo n° 1


main.cpp
#include <iostream> 
inline void minha_função(){ 
  std::cout << "Eu amo antas" << std::endl; 
} 

class minha_estrutura_t{ 
  protected: 
    int x; 
  public: 
    minha_estrutura_t(int x0):x(x0){} 
    inline int get_x() const{ 
      return x; 
    } 
}; 

int main(){ 
  minha_função(); 
  minha_estrutura_t s(7); 
  std::cout << s.get_x() << std::endl; 
  return 0; 
} 

Inline e headers


A inline é usada para declarar e implementar funções diretamente em um header (.hpp) sem risco de multi-definição. Na verdade, o símbolo e a função inline nunca aparece explicitamente no momento da "linkagem", uma vez que as chamadas para esta função foram todas substituídas. Lembre-se que se uma função não é inline, ela é implementada em um cabeçalho (header), e que este cabeçalho é incluído em vários lugares, o compilador retornará um erro de definição múltipla.

Lembre-se que fora as funções templates, apenas as funções inline podem ser implementadas no cabeçalho. Uma função template pode muito bem ser inline.

Se quisermos codificar uma função inline declarada em um header (.hpp), mas implementada em um arquivo fonte (.cpp) apenas o protótipo do header deve conter a palavra-chave inline.

Exemplo n° 2


arquivo.hpp
inline void f();

arquivo.cpp :
#include <iostream> 
#include "arquivo.hpp" 

void f(){ 
  std::cout << "plop !" << std::endl; 
} 



Tradução feita por Lucia Maurity y Nouira

Veja também

Artigo original publicado por . Tradução feita por pintuda. Última modificação: 17 de outubro de 2011 às 12:16 por pintuda.
Este documento, intitulado 'Os inlines em C++', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.