_fpeti_ 2017.08.03. 22:17

C++ fordító mágia

Van ez a cseppnyi kód:

#include <iostream>
using namespace std;

class f
{
public:
   f() { v = 0; }
   f(int a) :v(a) {};
   const f& operator=(int a) { v = a; return *this; }
   const f& operator+=(const f& m) { v += m.v; return *this; }
   int getv() const { return v;};
private:
   int v;
};

void main()
{
   f test;
   test = 1;
   test += 5; // this works without f::operator+=(int) !
   cout << "so test is = " << test.getv() << endl; // prints '6'
}

Nekem érdekesnek tűnik, hogy a fordítónak nem okoz gondot, hogy hozzáadja az '5'-t anélkül, hogy lenne hozzá megfelelő operátor-túlterhelés. Debug-ban végigmenve kiderül, mit is csinál a vs2013c++ fordítója:
csinál egy temporális 'f' példányt, majd meghívja neki az op=(int) fv-jét, így értéke 5 lesz, majd ezt hozzáadja a 'test' példányhoz az op+=(const f&) segítségével.
Azaz rájött, hogy a meglévő függvényekkel meg tudja oldani a feladatot. Szerintem durva, hogy ilyenre rájön.

Szólj hozzá!

A bejegyzés trackback címe:

https://sortagamedev.blog.hu/api/trackback/id/tr1612718218

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.