Avatar ·

Quando é necessário usar a palavra-chave inline para funções e métodos em C++?

Olá a todos! Sou um desenvolvedor C++ iniciante e estou constantemente atormentado pela questão da palavra-chave inline. Até onde entendo, ela "substitui" o código da função no local da chamada para evitar custos adicionais de chamada. Mas, na prática, vejo que compiladores modernos (GCC, Clang, MSVC) muitas vezes decidem por conta própria se devem inlining a função ou não, mesmo que eu não tenha escrito inline. E, inversamente, se eu escrevo inline, o compilador pode ignorar isso e não fazer o inlining. No final, fiquei confuso. Aqui está um exemplo: ```cpp // Arquivo utils.h int square(int x) { return x * x; } // Arquivo main.cpp #include "utils.h" int main() { int a = square(5); return 0; } ``` Se eu incluir este arquivo de cabeçalho em vários arquivos .cpp, o linker emitirá um erro de definição múltipla. Disseram-me que preciso adicionar inline. Mas por quê? Afinal, square é uma função pequena, e o compilador pode inlining ela de qualquer forma. E se eu adicionar inline, o que vai mudar? Ou outro caso: tenho uma função grande em uma classe. Se eu