Bagikan melalui


Prefiks Inkrement dan Decrement Operators: ++ dan --

Sintaks

++ unary-expression
-- unary-expression

Keterangan

Operator kenaikan awalan (++) menambahkan satu ke operand-nya; nilai bertahap ini adalah hasil ekspresi. Operand harus berupa nilai l bukan tipe const. Hasilnya adalah nilai l dengan jenis yang sama dengan operand.

Operator penurunan awalan (--) dianalogikan dengan operator kenaikan awalan, kecuali bahwa operand diturunkan oleh satu dan hasilnya adalah nilai yang diturunkan ini.

Visual Studio 2017 versi 15.3 dan yang lebih baru (tersedia dalam /std:c++17 mode dan yang lebih baru): Operan operator kenaikan atau penurunan mungkin tidak berjenis bool.

Operator prefiks dan postfix increment dan decrement memengaruhi operan mereka. Perbedaan utama di antara mereka adalah urutan di mana kenaikan atau penurunan terjadi dalam evaluasi ekspresi. (Untuk informasi selengkapnya, lihat Operator Kenaikan dan Keputusan Postfix.) Dalam formulir awalan, kenaikan atau penurunan terjadi sebelum nilai digunakan dalam evaluasi ekspresi, sehingga nilai ekspresi berbeda dari nilai operand. Dalam bentuk postfix, kenaikan atau penurunan terjadi setelah nilai digunakan dalam evaluasi ekspresi, sehingga nilai ekspresi sama dengan nilai operand. Misalnya, program berikut mencetak "++i = 6":

// expre_Increment_and_Decrement_Operators.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;

int main() {
   int i = 5;
   cout << "++i = " << ++i << endl;
}

Operan tipe integral atau mengambang bertambah atau diturunkan oleh nilai bilangan bulat 1. Jenis hasilnya sama dengan jenis operand. Pengoperasi jenis pointer dinaikkan atau diturunkan berdasarkan ukuran objek yang ditujunya. Pointer yang dinaikkan menunjuk ke objek berikutnya; pointer yang direkrementasi menunjuk ke objek sebelumnya.

Karena operator kenaikan dan penurunan memiliki efek samping, menggunakan ekspresi dengan operator kenaikan atau penurunan dalam makro praprosesor dapat memiliki hasil yang tidak diinginkan. Pertimbangkan contoh ini:

// expre_Increment_and_Decrement_Operators2.cpp
#define max(a,b) ((a)<(b))?(b):(a)

int main()
{
   int i = 0, j = 0, k;
   k = max( ++i, j );
}

Makro diperluas ke:

k = ((++i)<(j))?(j):(++i);

Jika i lebih besar dari atau sama dengan j atau kurang dari j 1, itu akan bertambah dua kali.

Catatan

Fungsi sebaris C++ lebih disukai untuk makro dalam banyak kasus karena menghilangkan efek samping seperti yang dijelaskan di sini, dan memungkinkan bahasa untuk melakukan pemeriksaan jenis yang lebih lengkap.

Lihat juga

Ekspresi dengan Operator Tunggal
Operator, Prioritas, dan Asosiatif Bawaan C++
Prefiks Kenaikan dan Pengurangan Operator