Bagikan melalui


Operator Penugasan

Sintaks

expression assignment-operator expression

assignment-operator: salah satu dari
=*=/=%=+=-=<<=>>=&=^=|=

Keterangan

Operator penugasan menyimpan nilai dalam objek yang ditentukan oleh operand kiri. Ada dua jenis operasi penugasan:

  • penetapan sederhana, di mana nilai operand kedua disimpan dalam objek yang ditentukan oleh operand pertama.

  • penugasan majemuk, di mana operasi aritmatika, pergeseran, atau bitwise dilakukan sebelum menyimpan hasilnya.

Semua operator penugasan dalam tabel berikut kecuali = operator adalah operator penugasan gabungan.

Tabel operator penugasan

Operator Makna
= Simpan nilai operand kedua dalam objek yang ditentukan oleh operand pertama (penetapan sederhana).
*= Kalikan nilai operand pertama dengan nilai operand kedua; simpan hasil dalam objek yang ditentukan oleh operand pertama.
/= Bagi nilai operand pertama dengan nilai operand kedua; simpan hasil dalam objek yang ditentukan oleh operand pertama.
%= Ambil modulus dari operand pertama yang ditentukan oleh nilai operand kedua; simpan hasil dalam objek yang ditentukan oleh operand pertama.
+= Tambahkan nilai operand kedua ke nilai operand pertama; simpan hasil dalam objek yang ditentukan oleh operand pertama.
-= Kurangi nilai operand kedua dari nilai operand pertama; simpan hasil dalam objek yang ditentukan oleh operand pertama.
<<= Geser nilai operand pertama meninggalkan jumlah bit yang ditentukan oleh nilai operand kedua; simpan hasil dalam objek yang ditentukan oleh operand pertama.
>>= Geser nilai operand pertama ke kanan jumlah bit yang ditentukan oleh nilai operand kedua; simpan hasil dalam objek yang ditentukan oleh operand pertama.
&= Dapatkan bitwise AND dari operand pertama dan kedua; simpan hasil dalam objek yang ditentukan oleh operand pertama.
^= Dapatkan or eksklusif bitwise dari operand pertama dan kedua; simpan hasil dalam objek yang ditentukan oleh operand pertama.
|= Dapatkan bitwise inklusif ATAU dari operand pertama dan kedua; simpan hasil dalam objek yang ditentukan oleh operand pertama.

Kata kunci operator

Tiga operator penugasan gabungan memiliki kata kunci yang setara. Yaitu:

Operator Setara
&= and_eq
|= or_eq
^= xor_eq

C++ menentukan kata kunci operator ini sebagai ejaan alternatif untuk operator penetapan gabungan. Di C, ejaan alternatif disediakan sebagai makro di <header iso646.h> . Di C++, ejaan alternatif adalah kata kunci; penggunaan <iso646.h> atau C++ setara <ciso646> tidak digunakan lagi. Di Microsoft C++, /permissive- opsi atau /Za pengkompilasi diperlukan untuk mengaktifkan ejaan alternatif.

Contoh

// expre_Assignment_Operators.cpp
// compile with: /EHsc
// Demonstrate assignment operators
#include <iostream>
using namespace std;
int main() {
   int a = 3, b = 6, c = 10, d = 0xAAAA, e = 0x5555;

   a += b;      // a is 9
   b %= a;      // b is 6
   c >>= 1;      // c is 5
   d |= e;      // Bitwise--d is 0xFFFF

   cout  << "a = 3, b = 6, c = 10, d = 0xAAAA, e = 0x5555" << endl
         << "a += b yields " << a << endl
         << "b %= a yields " << b << endl
         << "c >>= 1 yields " << c << endl
         << "d |= e yields " << hex << d << endl;
}

Penugasan sederhana

Operator penugasan sederhana (=) menyebabkan nilai operand kedua disimpan dalam objek yang ditentukan oleh operand pertama. Jika kedua objek memiliki jenis aritmatika, operand kanan dikonversi ke jenis sebelah kiri, sebelum menyimpan nilai.

Objek dan jenis const volatile dapat ditetapkan ke nilai l dari jenis yang hanya volatile, atau yang bukan const atau volatile.

Penugasan ke objek jenis kelas (struct, , dan class jenis) dilakukan oleh fungsi bernama operator=union. Perilaku default fungsi operator ini adalah melakukan penetapan salinan anggota yang bijaksana dari anggota data non-statis objek dan kelas dasar langsung; namun, perilaku ini dapat dimodifikasi menggunakan operator yang kelebihan beban. Untuk informasi selengkapnya, lihat Operator yang membebani. Jenis kelas juga dapat memiliki penugasan salinan dan memindahkan operator penugasan . Untuk informasi selengkapnya, lihat Menyalin konstruktor dan menyalin operator penugasan dan Memindahkan konstruktor dan memindahkan operator penugasan.

Objek dari kelas turunan yang tidak ambigu dari kelas dasar tertentu dapat ditetapkan ke objek kelas dasar. Kebalikannya tidak benar karena ada konversi implisit dari kelas turunan ke kelas dasar, tetapi tidak dari kelas dasar ke kelas turunan. Contohnya:

// expre_SimpleAssignment.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class ABase
{
public:
    ABase() { cout << "constructing ABase\n"; }
};

class ADerived : public ABase
{
public:
    ADerived() { cout << "constructing ADerived\n"; }
};

int main()
{
    ABase aBase;
    ADerived aDerived;

    aBase = aDerived; // OK
    aDerived = aBase; // C2679
}

Penugasan ke jenis referensi bertingkah seolah-olah penugasan sedang dibuat ke objek tempat titik referensi.

Untuk objek jenis kelas, penugasan berbeda dari inisialisasi. Untuk mengilustrasikan bagaimana penugasan dan inisialisasi yang berbeda dapat dilakukan, pertimbangkan kode

UserType1 A;
UserType2 B = A;

Kode sebelumnya menunjukkan penginisialisasi; ini memanggil konstruktor untuk UserType2 yang mengambil argumen jenis UserType1. Mengingat kode

UserType1 A;
UserType2 B;

B = A;

pernyataan penugasan

B = A;

dapat memiliki salah satu efek berikut:

  • Panggil fungsi operator= untuk UserType2, yang disediakan operator= disediakan dengan UserType1 argumen.

  • Panggil fungsi UserType1::operator UserType2konversi eksplisit , jika ada fungsi seperti itu.

  • Panggil konstruktor UserType2::UserType2, asalkan konstruktor seperti itu ada, yang mengambil UserType1 argumen dan menyalin hasilnya.

Penetapan campuran

Operator penetapan gabungan ditampilkan dalam tabel Operator penugasan. Operator ini memiliki formulir e1 op= e2, di mana e1 adalah nilai l yang tidakconst dapat dimodifikasi dan e2 adalah:

  • jenis aritmatika

  • pointer, jika op adalah + atau -

  • jenis yang ada kelebihan beban yang operator *op*= cocok untuk jenis e1

Bentuk e1 op e2 bawaan= berulah sebagai e1 e1 = op e2, tetapi e1 dievaluasi hanya sekali.

Penetapan majemuk ke jenis enumerasi menghasilkan pesan kesalahan. Jika operand kiri adalah jenis penunjuk, operand kanan harus dari jenis penunjuk, atau harus berupa ekspresi konstanta yang mengevaluasi ke 0. Ketika operand kiri berjenis integral, operand kanan tidak boleh dari jenis penunjuk.

Hasil operator penugasan bawaan

Operator penugasan bawaan mengembalikan nilai objek yang ditentukan oleh operand kiri setelah penugasan (dan operasi aritmatika/logis dalam kasus operator penugasan gabungan). Jenis yang dihasilkan adalah jenis operand kiri. Hasil ekspresi penugasan selalu merupakan nilai l. Operator ini memiliki associativity kanan-ke-kiri. Operand kiri harus berupa nilai l yang dapat dimodifikasi.

Di ANSI C, hasil ekspresi penugasan bukan nilai l. Itu berarti ekspresi (a += b) += c C++ legal tidak diizinkan di C.

Lihat juga

Ekspresi dengan operator biner
Operator, prioritas, dan associativitas bawaan C++
Operator penugasan C