A C++11 szabványról

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

A C++11 szabványról

HozzászólásSzerző: csabeszq » 2017. január 16. hétfő, 0:43

A C++11 szabvány 2011-ben jött ki és alapvetően átalakítja a C++ nyelvi szerkezetét. Mostanra a fordítók eljutottak odáig, hogy hellyel-közzel támogatják a szabványt, a példákat Linux alatt Arduino nanoval fordítottam, működtek. Nem árt, ha tisztába kerülük azzal, hogy a nyelv, amit C++ néven ismertünk meg fog változni alapjaiban.

Amit az avr-gcc Linux alatt Arduino 1.6.13 alatt nálam ebből támogatott:

- auto kulcsszó, a C++-ra bízod, hogy találja ki neked a paraméter típusát.

Kód: Egész kijelölése

auto i=12; // ez int-nek felel meg
auto c="hello"; // ez char *-nak
long lg=1;
auto a=lg; // ez long lesz


- új típusú függvénydeklaráció, ahol a típus hátulra kerül, ennek később mutatom meg az értelmét

Kód: Egész kijelölése

auto setup() -> void
{
}


- típus deklaráció decltype-pal

Kód: Egész kijelölése

int i=1;
decltype (i) p=2; // p típusa ugyanaz, mint i típusa


- írjunk általános összeadó függvényt, amelyik bármilyen típusú objektumokat képes összeadni és megfelelő típusban adja a végeredményt vissza

Kód: Egész kijelölése

template <typename T> auto szamolo(T a, T b) -> decltype(a + b)
{
  return a+b;
}


- Felhasználó által definiált konstans literálok (kötelező _-val kezdődniük, a példa 25_negyzet-ről szól, ahová a fordító 625-öt fog berakni):

Kód: Egész kijelölése

uint16_t operator""_negyzet(unsigned long long int param)
{
  return param * param;
}

Serial.println( 25_negyzet );


- anonim függvények:

Kód: Egész kijelölése

void (*callback)(int param); // ez egy callback függvény-mutató
 
callback = [](int param) { // anonim függvény definíció
  Serial.println(param);   // nincs neve a függvénynek, amit a callback-be raksz
};


- egyszerűsített for ciklus tömbökön

Kód: Egész kijelölése

int tomb[] = {1, 2, 3, 4, 5};
for( int i : tomb )
  Serial.println(i);


Elsőre ennyi. Persze még kismilló helyen másként viselkedik a C++11 a megszokott C++-hoz képest.
Link itt:
https://en.wikipedia.org/wiki/C%2B%2B11

Az avr-gcc nem implementálta a C++11-et teljesen.

Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: A C++11 szabványról

HozzászólásSzerző: SanyiSay » 2017. január 16. hétfő, 7:03

Ezzel a téma nyitással kelett volna kezdeni. :)
Így már én is beállok azok közé akik megköszönik, hogy ezt megosztottad.
Én esetemben szerencsére nem beszélhetünk átszokásról mert csak ismerkedem a C++ al, ám így legalább egyből a jó irányba haladok.
A megosztott példák működnek, Eclipse Neon Baeyens v3.1 Arduino alatt fordítva, C++11 valóban megér egy kis utána olvasást.
Köszi.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3354
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: A C++11 szabványról

HozzászólásSzerző: kapu48 » 2017. január 16. hétfő, 8:54

Én bevallom, hogy még csak a felszínét kapargatom a C++-nak is.

Ebből a C++11 példákból pedig szinte semmit sem értek még!
Írhattál volna több magyarázatott a sorok közé!


(Lehet, hogy ez is csak poén?) :wink:

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3354
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: A C++11 szabványról

HozzászólásSzerző: kapu48 » 2017. január 16. hétfő, 9:15

Egyébként is kinek van ideje kísérletezgetni az új arduinos IDE-vel?
Mikor még a régebbiek is televannak bosszantó hibákkal!

ksanci
DrótVégénSzéndarab
Hozzászólások: 28
Csatlakozott: 2016. július 24. vasárnap, 12:04

Re: A C++11 szabványról

HozzászólásSzerző: ksanci » 2017. január 22. vasárnap, 11:18

Ezek az újítások a lusta és trehány programozónak jók, azoknak, akik mindenféle tervezés nélkül csak nekiállnak és ír-{futtat-javít} végtelen ciklusában ragadnak :D Olyanoknak, mint én :D
Csak poénkodom, örülnék, ha csak tizedannyira értenék az alap C-hez is, mint amennyire a huszadrészét gondolom annak, hogy értem a tizedét az egésznek...


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: Bing [Bot] valamint 1 vendég