Problém s úkolem C++

D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re:Problém s úkolem C++
« Odpověď #15 kdy: 25. 01. 2018, 21:58:07 »
Mala poznamka :
Konstantu pro definovani rozmeru pole, bych osobne vynechal, vzhledem k tomu ze jeji jediny ucel je urcit rozmer pole je myslim zbytecne pouzit promennou a volil bych spis toto reseni:

Kód: [Vybrat]
#define VEL 10
...
typedef klient cekarna[ VEL ];
...
... což je c++ prasárna.

Proc?
c++ má specifikátor const.
#define pro konstanty v c++ je anachronismus(?)
achranofobie?
V každém případě konstanty s const jsou šéfované překladačem, #define je záležitost preprocesoru...

Ve vsem mas pravdu. Az na to, ze specifikator const byl ( - pokud si to dobre pamatuji - ) uz v C. A promena v tomto pripade zbytecne zabere sizeof(int) v pameti, kdezto pri pouziti makra mas nakonec stejny vysledek jako by jsi napsal :

Kód: [Vybrat]
typedef klient cekarna[ 10 ];
...

Coz mi pro tento pripad prijde vyhodnejsi.

Vis ono s temi makry je to trochu dvojaky. jeden cas jsem taky jako papousek opakoval, ze makra do C++ nepatri. Nic nevi o datovych typech, pri jejich rozvinuti mohou vznikat ruzne nechtene efekty atpd... Tehdy mi nekdo rikal, ze kdyz vis co delas muzes pouzit cokoliv. Nic neni samospasne a nic neni k zahozeni. Az Foxtoolkit mi ukazal (konkretne na tech makrech) jaka je to pravda....


Re:Problém s úkolem C++
« Odpověď #16 kdy: 25. 01. 2018, 22:29:23 »
...
Už jsem z toho vypadl, nerad bych kecal, ale mám dojem, že esli const proměnná opravdu zabere nějakou paměť závisí na na jejím typu a kontextu.

Nicméně, 'Co je překladačovo, nechte překladači.'

PS: modifikátor const se v c choval hodně jinak...

MarSik

Re:Problém s úkolem C++
« Odpověď #17 kdy: 26. 01. 2018, 00:27:16 »
const proměnná v moderním c++ žádné místo nezabere, pokud to není potřeba (třeba k získání pointeru). Těch podmínek je docela dost, ale const int L = 5; je rozhodně splňuje. Používám i na mikrokontrolerech a není s tím žádný problém. V objdumpu prostě neexistuje.

Viz http://en.cppreference.com/w/cpp/language/constant_expression

MarSik

Re:Problém s úkolem C++
« Odpověď #18 kdy: 26. 01. 2018, 00:33:37 »
Nicméně, 'Co je překladačovo, nechte překladači.'

To sice ano, ale bez const tu proměnnou k určení velikosti pole použít nesmíte. Obecné pravidlo minimálně od C++11 je používat const  všude, kde to jen jde. Překladač si to přebere a vyoptimalizuje, ale ten hint je pro něj velmi užitečný.

To samé auto. Téměř všechny lokální proměnné s inicializací jsou ideálními kandidáty.