Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Składnia
expression
assignment-operator
expression
assignment-operator: jeden z
= *= /= %= += -= <<= >>= &= ^= |=
Uwagi
Operatory przypisania przechowują wartość w obiekcie określonym przez lewy operand. Istnieją dwa rodzaje operacji przypisania:
proste przypisanie, w którym wartość drugiego operandu jest przechowywana w obiekcie określonym przez pierwszy operand.
przypisanie złożone, w którym jest wykonywana operacja arytmetyczna, shift lub bitowa przed zapisaniem wyniku.
Wszystkie operatory przypisania w poniższej tabeli z wyjątkiem = operatora są operatorami przypisania złożonego.
Tabela operatorów przypisania
| Obsługujący | Znaczenie |
|---|---|
= |
Zapisz wartość drugiego operandu w obiekcie określonym przez pierwszy operand (proste przypisanie). |
*= |
Pomnóż wartość pierwszego operandu przez wartość drugiego operandu; zapisz wynik w obiekcie określonym przez pierwszy operand. |
/= |
Podziel wartość pierwszego operandu przez wartość drugiego operandu; zapisz wynik w obiekcie określonym przez pierwszy operand. |
%= |
Weź modulo pierwszego operandu określonego przez wartość drugiego operandu; zapisz wynik w obiekcie określonym przez pierwszy operand. |
+= |
Dodaj wartość drugiego operandu do wartości pierwszego operandu; zapisz wynik w obiekcie określonym przez pierwszy operand. |
-= |
Odejmij wartość drugiego operandu z wartości pierwszego operandu; zapisz wynik w obiekcie określonym przez pierwszy operand. |
<<= |
Przesunięcie wartości pierwszego operandu pozostawiło liczbę bitów określoną przez wartość drugiego operandu; zapisz wynik w obiekcie określonym przez pierwszy operand. |
>>= |
Przesunięcie wartości pierwszego operandu w prawo liczba bitów określonych przez wartość drugiego operandu; zapisz wynik w obiekcie określonym przez pierwszy operand. |
&= |
Uzyskaj bitowe AND pierwszych i drugich operandów; zapisz wynik w obiekcie określonym przez pierwszy operand. |
^= |
Uzyskaj bitowo wyłączny OR pierwszego i drugiego operandu; zapisz wynik w obiekcie określonym przez pierwszy operand. |
|= |
Uzyskaj bitowe or pierwszego i drugiego operandu; zapisz wynik w obiekcie określonym przez pierwszy operand. |
Słowa kluczowe operatora
Trzy operatory przypisania złożonego mają odpowiedniki słów kluczowych. Są to:
| Obsługujący | Równoważny |
|---|---|
&= |
and_eq |
|= |
or_eq |
^= |
xor_eq |
Język C++ określa te słowa kluczowe operatora jako alternatywne pisownia dla operatorów przypisania złożonego. W języku C alternatywne pisownie są udostępniane jako makra w nagłówku <iso646.h> . W języku C++alternatywne pisownie są słowami kluczowymi; użycie iso646.h> lub równoważnego <<ciso646> języka C++ jest przestarzałe. W języku Microsoft C++ /permissive- opcja lub /Za kompilatora jest wymagana do włączenia alternatywnej pisowni.
Przykład
// 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;
}
Proste przypisanie
Prosty operator przypisania (=) powoduje, że wartość drugiego operandu ma być przechowywana w obiekcie określonym przez pierwszy operand. Jeśli oba obiekty są typami arytmetycznymi, prawy operand jest konwertowany na typ lewej, przed zapisaniem wartości.
const Obiekty i volatile typy można przypisać do l-wartości typów, które są tylko volatile, lub które nie const są lub volatile.
Przypisanie do obiektów typu klasy (struct, unioni class typów) jest wykonywane przez funkcję o nazwie operator=. Domyślnym zachowaniem tej funkcji operatora jest wykonanie przypisania kopii mądrej składowej niestacjonanych składowych obiektu i bezpośrednich klas bazowych; można jednak zmodyfikować to zachowanie przy użyciu przeciążonych operatorów. Aby uzyskać więcej informacji, zobacz Przeciążenie operatora. Typy klas mogą również mieć operatory przypisania kopiowania i przenoszenia przypisania . Aby uzyskać więcej informacji, zobacz Kopiowanie konstruktorów i operatorów przypisania kopiowania oraz Przenoszenie konstruktorów i operatorów przypisania przenoszenia.
Obiekt każdej jednoznacznie pochodnej klasy z danej klasy bazowej można przypisać do obiektu klasy bazowej. Odwrotnie nie ma wartości true, ponieważ istnieje niejawna konwersja z klasy pochodnej na klasę bazową, ale nie z klasy bazowej do klasy pochodnej. Przykład:
// 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
}
Przypisania do typów odwołań zachowują się tak, jakby przypisanie zostało wykonane do obiektu, do którego wskazuje odwołanie.
W przypadku obiektów typu klasy przypisanie różni się od inicjowania. Aby zilustrować, jak różne może być przypisanie i inicjowanie, rozważ kod
UserType1 A;
UserType2 B = A;
Powyższy kod przedstawia inicjator; wywołuje konstruktor, UserType2 który przyjmuje argument typu UserType1. Biorąc pod uwagę kod
UserType1 A;
UserType2 B;
B = A;
instrukcja przypisania
B = A;
może mieć jeden z następujących efektów:
Wywołaj funkcję
operator=dlaUserType2parametru , podanaoperator=jest z argumentemUserType1.Wywołaj funkcję
UserType1::operator UserType2jawnej konwersji , jeśli taka funkcja istnieje.Wywołaj konstruktor , pod warunkiem, że taki
UserType2::UserType2konstruktor istnieje, który przyjmujeUserType1argument i kopiuje wynik.
Przypisanie złożone
Operatory przypisania złożonego są wyświetlane w tabeli Operatory przypisania. Te operatory mają formę e1op= e2, gdzie e1 jest niemodyfikowalnąconst wartością l i e2 :
typ arytmetyczny
wskaźnik, jeśli op jest
+lub-typ, dla którego istnieje pasujące
operator *op*=przeciążenie typu e1
Wbudowany formularz e1op= e2 zachowuje się jako e1 e1=e1ope2, ale e1 jest oceniany tylko raz.
Przypisanie złożone do typu wyliczonego generuje komunikat o błędzie. Jeśli lewy operand ma typ wskaźnika, prawy operand musi być typem wskaźnika lub musi być wyrażeniem stałym, które daje wartość 0. Gdy lewy operand jest typu całkowitego, prawy operand nie może być typem wskaźnika.
Wynik wbudowanych operatorów przypisania
Wbudowane operatory przypisania zwracają wartość obiektu określonego przez lewy operand po przypisaniu (i operację arytmetyczną/logiczną w przypadku operatorów przypisania złożonego). Wynikowy typ jest typem lewego operandu. Wynik wyrażenia przypisania jest zawsze wartością l.. Te operatory mają skojarzenie od prawej do lewej. Lewy operand musi być modyfikowalną wartością l..
W języku ANSI C wynik wyrażenia przypisania nie jest wartością l. Oznacza to, że prawne wyrażenie (a += b) += c języka C++ nie jest dozwolone w języku C.
Zobacz także
Wyrażenia z operatorami binarnymi
Wbudowane operatory, pierwszeństwo i kojarzenie języka C++
Operatory przypisania języka C