Code360 powered by Coding Ninjas X Naukri.com. Code360 powered by Coding Ninjas X Naukri.com
Table of contents
1.
Introduction
2.
What are inline functions in C++?
3.
Syntax of Inline Function in C++
4.
Circumstances Where the Compiler Does Not Consider Inline Functions
5.
Why Inline Functions Are Used?
6.
Example of Inline Functions
6.1.
C++
7.
Inline Function and Classes
7.1.
C++
8.
Advantage of Inline functions in C++
9.
Disadvantage of Inline functions in C++
10.
What is Wrong with the Macro?
10.1.
Issues with Macros
11.
When not to use inline functions
12.
Difference Between Normal Function and Inline Function
13.
Frequently Asked Questions
13.1.
What are macros?
13.2.
What is the difference between macro and inline?
13.3.
What is an Inline Variable in C++?
14.
Conclusion
Last Updated: Sep 3, 2024
Easy

Inline Functions in C++

Author Urwashi Priya
0 upvote

Introduction

In C++, inline functions are a powerful feature designed to enhance the performance of your code by reducing function call overhead. Unlike regular functions, which involve a call stack and execution overhead, inline functions suggest to the compiler to insert the function's body directly into each place where the function is called. This can lead to significant performance improvements, especially in cases where functions are called frequently or are small in size. In this blog, we'll explore the concept of inline functions, their syntax, and their benefits.

Inline Functions in C++

Also see, Literals in C, Fibonacci Series in C++

What are inline functions in C++?

Inline functions in C++ are a feature that allows the compiler to insert the body of a function directly into each place where the function is called. This eliminates the overhead of a function call, such as stack operations and branch instructions, potentially leading to performance improvements. Inline functions are typically used for small, frequently called functions where the overhead of a function call might be significant compared to the execution time of the function itself. By suggesting to the compiler that a function should be inlined, you can reduce the function call overhead and make your code run faster.

Syntax of Inline Function in C++

inline returnType functionName(parameters) {
    // function body
}

Circumstances Where the Compiler Does Not Consider Inline Functions

  • Function Complexity: If the function body is too complex or contains multiple statements, the compiler may ignore the inline request.
  • Recursive Functions: Inline functions that call themselves recursively are generally not inlined.
  • Virtual Functions: Virtual functions are typically not inlined because their actual implementation is determined at runtime.
  • Function Pointers: Functions called through pointers cannot be inlined.
  • Static Variables: Functions that use static local variables may not be suitable for inlining.
  • Compiler Constraints: The compiler may choose to ignore the inline keyword based on its optimization settings or heuristics.

Why Inline Functions Are Used?

Inline functions are used primarily to improve performance by reducing the overhead associated with function calls. When a function is declared as inline, the compiler attempts to replace the function call with the function's actual code. This can result in:

  • Reduced Function Call Overhead: By eliminating the need to push and pop arguments and return addresses on the call stack, inline functions can reduce the time spent on function calls.
  • Improved Execution Speed: For small, frequently used functions, inlining can make the code run faster by removing the overhead of calling the function.
  • Enhanced Performance in Critical Code Sections: Inline functions are particularly useful in performance-critical sections of code where every microsecond counts.

Example of Inline Functions

  • C++

C++

#include <iostream>
#include <stdio.h>
using namespace std;

inline int max(int a, int b){
   return a>b?a:b;
}

int main()
{
   int a=10, b=20;
   cout<<"maximum of 10 and 20 is "<<max(a,b);
   return 0;
}
You can also try this code with Online C++ Compiler
Run Code

max(a, b) denotes function call and gets replaced by return a>b? a:b.

Output:

Sample Output:
maximum of 10 and 20 is 20

 

You can try and compile with the help of online c++ compiler.

Inline Function and Classes

In C++, inline functions can be particularly useful within classes to optimize performance and reduce the overhead associated with function calls.

Example:

  • C++

C++

#include <iostream>

class MathOperations {
public:
// Inline function definition inside the class
inline int add(int a, int b) {
return a + b;
}

// Inline function definition outside the class
inline int multiply(int a, int b);
};

// Inline function definition outside the class
inline int MathOperations::multiply(int a, int b) {
return a * b;
}

int main() {
MathOperations math;

// Using inline functions
int sum = math.add(5, 3);
int product = math.multiply(4, 7);

std::cout << "Sum: " << sum << std::endl; // Output: Sum: 8
std::cout << "Product: " << product << std::endl; // Output: Product: 28

return 0;
}
You can also try this code with Online C++ Compiler
Run Code

 

Output:

Sum: 8
Product: 28

Explanation:

  • In the example, add and multiply are defined as inline functions.
  • add is defined directly inside the class, which is automatically considered inline.
  • multiply is defined outside the class but is marked as inline to suggest inlining.
  • When the program runs, the calls to add and multiply are replaced with their respective code snippets during compilation, reducing function call overhead.

Advantage of Inline functions in C++

  • The inline function just replaces the statement, no need to move from calling function to called function and vice versa.
  • It saves memory space reduces time complexity.
  • It can be used as a substitute for macros.
  • It does not require any extra data structure such as stack and thus saves the rigorous push and pop operation.

Disadvantage of Inline functions in C++

  • Sometimes the speed of instruction is reduced due to multiple uses of inline functions.
  • Compile-time increases due to multiple uses of inline functions.

What is Wrong with the Macro?

Macros are a feature of the C++ preprocessor that allow for code substitution. While they offer some benefits, they also have significant drawbacks compared to inline functions:

Issues with Macros

1. Lack of Type Safety:

  • Macros are simple text substitutions and do not perform type checking. This can lead to unexpected errors or unintended behavior if the macro is used with incompatible types.
  • The macro SQUARE(x) expands to (x * x), leading to unintended results due to lack of parentheses around the macro argument, which can cause issues with complex expressions.

2. No Scope Management:

  • Macros do not respect scopes and can lead to name collisions or unexpected behavior if the same macro name is used in different parts of the code.
  • The macro MAX is replaced by 100 before compilation, but the local variable MAX shadows this value, which can be confusing.

3. Debugging Difficulty:

  • Errors in macros can be difficult to debug because they are replaced by their expanded code before compilation, making it hard to trace the source of errors.

4. Lack of Functionality:

  • Macros cannot handle complex operations involving multiple statements or different return types, whereas inline functions can.

When not to use inline functions

  • Inline function is not used if the function definition is quite large.
  • These functions are not to be used if a loop, switch statement exists.
  • Also, in the case of static variables, do not use inline functions.

Difference Between Normal Function and Inline Function

ParametersNormal FunctionInline Function
Function Call OverheadInvolves overhead for function call, including stack operations and branch instructions.Reduced overhead as the function’s body is inserted directly where it is called.
CompilationThe function code is compiled separately and linked during the linking phase.The function code is expanded in place at compile-time.
Execution SpeedMay be slower due to the function call overhead.Potentially faster as it avoids the overhead of calling the function.
Code SizeDoes not affect code size significantly.Can increase code size due to code duplication.
UsageSuitable for complex functions with multiple statements.Best for small, frequently used functions.
RecursionCan handle recursive calls.Typically not suited for recursive functions.
Virtual FunctionsCan be virtual and use dynamic dispatch.Virtual functions are generally not inlined.

Frequently Asked Questions

What are macros?

macros are defined by #define directive. It replaces the name of macro with the value of the macro. For Example: “# define a 10”, a is the name of the macro and wherever a exists in the program it is replaced by 10.

What is the difference between macro and inline?

Inline function is a short function that is analysed by the compiler, whereas the preprocessor expands a macro.

What is an Inline Variable in C++?

An inline variable in C++ is a variable declared with the inline keyword, allowing it to be defined in multiple translation units without violating the One Definition Rule (ODR). It ensures consistency and avoids linkage issues.

Conclusion

In this blog, we have discussed Inline Functions in C++. Inline functions in C++ offer a powerful way to optimize performance by reducing the overhead of function calls. By suggesting that the compiler replace function calls with the function's body directly, inline functions can lead to faster execution, especially for small and frequently called functions. 

Now, we strongly recommend you to understand the other related concepts in C++ and enhance your learning. You can get a wide range of topics similar to this on basics of c++

It's not the end. Learn and explore more.

Live masterclass