TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
 Specialized Dev Zones Research Center eBook Library .NET Java C++ Web Dev Architecture Database Security Open Source Enterprise Mobile Special Reports 10-Minute Solutions DevXtra Blogs Slideshow

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.

 Home » Tip Bank » C++
Language: C++
Expertise: Intermediate
Sep 8, 2000

### WEBINAR:On-Demand

Building the Right Environment to Support AI, Machine Learning and Deep Learning

# Understanding the Difference Between Postfix and Prefix Operators

The built-in ++ and—operators can appear on both sides of their operand:

``````
int n=0;
++n; // prefix ++
n++; // postfix ++
``````

You probably know that a prefix operator first changes its operand before taking its value. For example:

``````
int n=0, m=0;
n = ++m; // first increment m, then assign its value to n
cout << n << m; // display 1 1
``````

In this example, n equals 1 after the assignment because the increment operation took place before m's value was taken and assigned to n. By contrast,

``````
int n=0, m=0;
n = m++; // first assign m's value to n, then increment m
cout << n << m; // display 0 1
``````

In this example, n equals 0 after the assignment because the increment operation took place after m's original value was taken and assigned to n.

To understand the difference between postfix and prefix operators better, you can examine the disassembly code generated for these operations. Even if you're not familiar with assembly languages, you can immediately see the difference between the two—simply notice where the inc (increment) assembly directive appears:

``````
// disassembly of the expression: m=n++;
mov ecx, [ebp-0x04] // store n's value in ecx register
mov [ebp-0x08], ecx // assign value in ecx to m
inc dword ptr [ebp-0x04] // increment n;

// disassembly of the expression: m=++n;
inc dword ptr [ebp-0x04] // increment n;
mov eax, [ebp-0x04] // store n's value in eax register
mov [ebp-0x08], eax // assign value in eax to m
``````
Danny Kalev

 Submit a Tip Browse "C++" Tips Browse All Tips
Comment and Contribute

(Maximum characters: 1200). You have 1200 characters left.

Thanks for your registration, follow us on our social networks to keep up-to-date