augmented assignment
Megjelenés
(compound assignment szócikkből átirányítva)
Főnév
augmented assignment (tsz. augmented assignments)
- (informatika) Az augmented assignment (bővített értékadó) kifejezés a C++ nyelvben azokra az értékadásokat kombináló műveletekre utal, amelyek valamilyen műveletet és értékadást egyszerre hajtanak végre. Ezek egyszerűsítik a kódot, növelik az olvashatóságot, és gyakran hatékonyabbak is lehetnek fordítási szinten.
🧮 Alapfogalom
A sima értékadás:
a = a + b;
Bővített (augmented) változata:
a += b;
Ez nem csak rövidebb, hanem gyakran hatékonyabb is, mert a fordító optimalizálhatja.
🔢 Támogatott augmented operátorok
C++ nyelvben a következő augmented assignment operátorokat ismerjük:
| Operátor | Jelentés | Példa | ||
|---|---|---|---|---|
+= |
összeadás + értékadás | a += b; |
||
-= |
kivonás + értékadás | a -= b; |
||
*= |
szorzás + értékadás | a *= b; |
||
/= |
osztás + értékadás | a /= b; |
||
%= |
maradékos osztás | a %= b; |
||
<<= |
biteltolás balra | a <<= 2; |
||
>>= |
biteltolás jobbra | a >>= 2; |
||
&= |
bitenkénti ÉS | a &= b; |
||
| ` | =` | bitenkénti VAGY | `a | = b;` |
^= |
bitenkénti XOR | a ^= b; |
🧠 Hogyan működik?
Példa:
int a = 5;
a += 3; // ugyanaz, mint: a = a + 3;
Fordításkor ez rövidebb assembly utasításokká alakulhat, mint ha külön értékadást és műveletet írnánk.
🎯 Előnyök
- Kód rövidítése: kevesebb gépelés, kisebb hibalehetőség.
- Kifejezőbb: egyértelműen jelzi, hogy a változó önmagát módosítja.
- Teljesítmény: egyes esetekben a fordító optimalizálni tudja (pl. nincs szükség ideiglenes változóra).
- Operator overloading támogatás: osztályokban is testreszabható viselkedés.
🧱 Osztályban overloadolás (pl. +=)
C++-ban saját típusokra is írhatunk augmented assignment operátort:
class Vec2 {
public:
int x, y;
Vec2(int x=0, int y=0): x(x), y(y) {}
Vec2& operator+=(const Vec2& rhs) {
x += rhs.x;
y += rhs.y;
return *this;
}
};
Használat:
Vec2 a(1, 2), b(3, 4);
a += b; // a == (4, 6)
🧩 Használati helyek
- Számlálók, ciklusok:
for (int i = 0; i < 10; i += 2)
- Bitműveletek:
flags |= 0x01; // kapcsoló beállítása
- Tömbindexelés:
int i = 0;
arr[i++] += 5;
- Saját típusok kezelésére, mint vektorok, mátrixok stb.
⚠️ Buktatók
- Prioritás:
a += b * c→a = a + (b * c)(nema = (a + b) * c). - Oldalhatások: ha
avagybegy függvényhívás, értékelési sorrendre figyelni kell. - Overloadnál ne felejtsük el referencia-visszatérést (
return *this), különben nem működik jól a láncolás (a += b += c). - Konstans objektumokon nem működik, hacsak nem
mutable.
🤖 Standard könyvtári típusokkal
A legtöbb STL típus támogatja az augmented operátorokat:
std::string s = "Hello ";
s += "World"; // "Hello World"
std::vector<int> v1 = {1, 2};
std::vector<int> v2 = {3, 4};
// v1 += v2; // NEM működik, mivel nincs definiálva erre az operátor
Ha szükséges, saját overloadot írhatunk, pl.:
template <typename T>
std::vector<T>& operator+=(std::vector<T>& lhs, const std::vector<T>& rhs) {
lhs.insert(lhs.end(), rhs.begin(), rhs.end());
return lhs;
}
📘 Összegzés
- Az augmented assignment operátorok a C++ nyelv fontos és hatékony elemei.
- Nemcsak primitív típusokkal használhatók, hanem saját típusokra is testreszabhatók.
- Kódot tisztábbá, rövidebbé és hatékonyabbá tehetnek.
- Fontos figyelni a prioritásra, oldalhatásokra és az overloadolásnál a szintaktikára.
- augmented assignment - Szótár.net (en-hu)
- augmented assignment - Sztaki (en-hu)
- augmented assignment - Merriam–Webster
- augmented assignment - Cambridge
- augmented assignment - WordNet
- augmented assignment - Яндекс (en-ru)
- augmented assignment - Google (en-hu)
- augmented assignment - Wikidata
- augmented assignment - Wikipédia (angol)