<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=50&amp;t=11184&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-03-30T14:11:59+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=50&amp;t=11184&amp;mode</id>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-03-30T14:11:59+01:00</updated>
<published>2015-03-30T14:11:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=125061#p125061</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=125061#p125061"/>
<title type="html"><![CDATA[Re: Początki z C++, kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=125061#p125061"><![CDATA[
Jeżeli Trzymającym Władzę to nie przeszkadza, to ja nie mam nic przeciwko zjeżdżaniu na pobocza w tym topicu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />@<strong>mg101</strong> - dziękuję za kolejny link do zbioru <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Nie twierdzę, że biblioteki standardowe są złe. Po prostu moje doświadczenia z programowaniem to w 80-90% zabawy z avr/stm. Pozostała część (programy na &quot;normalne komputery&quot;) to przede wszystkim prościutkie programiki pisane żeby coś sprawdzić/przetestować/pobawić się (bo PC daje &quot;instant effect&quot; bez debuggera, szukania płytki stykowej i ledów etc etc...). Mam zerowe doświadczenie jeśli chodzi o pisanie &quot;normalnych&quot; programów. <br /><br />I teraz do sedna: wydaje mi się, że biblioteki są pisane przede wszystkim z myślą o &quot;głównym nurcie&quot; i w prostych systemach wbudowanych często okazują się... nie najlepszym rozwiązaniem. Myślę, że stąd bierze się ta podejrzliwość względem wszystkiego co gotowe - bo może można prościej, bez bajerów itd... Dodatkowo to przeświadczenie &quot;dokarmiane&quot; jest często po porównaniu funkcji gotowych i własnych. <br /><br />Gdzieś/kiedyś trafiłem na przykład serwera http w pythonie - to były z grubsza 3 linijki kodu na krzyż. Przeraża mnie to w pewnym sensie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Zaletą C i poniekąd asm'a jest dla mnie prostota - mam ograniczony zestaw prostych narzędzi i z ich pomocą jestem w stanie zrobić sobie wszystko (cały czas mówię o AVR'o podobnych). Kiedyś próbowałem przebrnąć przez manual bascom'a - poddałem się bo tego wszystkiego było za dużo. Być może dla niektórych to zabrzmi niedorzecznie, ale według mnie taki bascom czy biblioteki Arduino wymagają o wiele więcej nauki niż C - przynajmniej raz trzeba przebrnąć przez opis funkcji, żeby potem wiedzieć jakie zabawki się ma do dyspozycji. O Pythonie nawet nie wspomnę <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br />Na pewno inaczej bym to wszystko postrzegał, gdybym był związany z programowaniem zawodowo a nie hobbystycznie. Zalety, o których wspominasz (efektywność tworzenia projektów) dla mnie są... gdzieś na końcu listy zalet. Może kiedyś ten punkt widzenia się zmieni <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />W *.lss spędzam więcej czasu niż we wszystkich pozostałych plikach projektu razem wziętych <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> Jak dotąd AVR-G++ nie dał się przyłapać na czymś paskudnym. Przy Cortex'ie nie do końca rozumiem wszystko czym mnie toolchain uszczęśliwia - np. &quot;frame_dummy&quot;, funkcje _init/_fini które nic mądrego nie robią, udziwniony (według mnie) sposób wywoływania konstruktorów obiektów globalnych i statycznych - ale małymi kroczkami dochodzę z G++ do porozumienia <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />------------------------------<br /><br />Witam ponownie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Że tak powiem, &quot;podbijam temat&quot; z okazji pojawienia się nowego problemu/ów. A problem/y wygląda/ją tak:<br /><br />1. Czy jest jakiś sposób, aby w konstruktorze dokonać statycznego (w czasie kompilacji) sprawdzania wartości parametrów (np. czy &quot;&gt;0&quot; itp...)? Próbowałem następujących opcji:<br />- <em>static_assert</em> - nie działa bo parametr wewnątrz funkcji nie jest <em>constexpr</em><br />- konstruktor &quot;szablonowy&quot; i parametr przekazywany jako parametr szablonu - też nie działa - tylko nie mogę dojść do tego, czy to ja nie wiem jak to zapisać, czy konstruktor nie może być szablonowy w taki sposób jak ja bym tego chciał:<br />[syntax=cpp]struct Klasa {<br />    template&lt;int size&gt; Klasa(){<br />        / ... /<br />    }<br />};<br /><br />int main(){<br />    Klasa obiekt&lt;10&gt;;<br />}[/syntax]<br /><br />2. Jeżeli korzystam z szablonów klas, to każda &quot;wersja&quot; klasy wygenerowanej z szablonu ma swój zestaw metod - bez względu na to, czy kod danej metody zależy od parametrów szablonu czy też nie. Jest jakiś elegancki sposób aby metody &quot;niezależne&quot; od parametrów szablonu (identyczne dla wszystkich klas utworzonych z szablonu) nie były powtarzane i nie zajmowały pamięci?<p>Statystyki: Napisane przez Gość — 30 mar 2015, o 14:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mg101]]></name></author>
<updated>2015-03-30T13:17:24+01:00</updated>
<published>2015-03-30T11:11:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=125049#p125049</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=125049#p125049"/>
<title type="html"><![CDATA[Re: Początki z C++, kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=125049#p125049"><![CDATA[
Kiedyś uczyłem się C++  z <!-- m --><a class="postlink" href="http://cpp0x.pl/" >http://cpp0x.pl/</a><!-- m -->. Polecam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=683">mg101</a> — 30 mar 2015, o 11:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-03-30T09:42:15+01:00</updated>
<published>2015-03-30T09:42:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=125044#p125044</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=125044#p125044"/>
<title type="html"><![CDATA[Re: Początki z C++, kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=125044#p125044"><![CDATA[
@<strong>D_C</strong> - dziękuję za link <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />@<strong>mokrowski</strong> - no właśnie najciekawsze wydają się te najnowsze fiuczery, o których najmniej napisano jak dotąd <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Co do meta-maszyny - dziękuję za link, ogarnięcie tego trochę mi zajmie.<br /><br />Ja to właściwie chyba nie lubię języków &quot;wyższego&quot; poziomu i wszystkich dobrodziejstw z nimi związanych (z bibliotekami włącznie) <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /> Co to za przyjemność z programowania jak &quot;wszystko już jest&quot;. Może to jakieś odchylenie (syndrom <a href="http://en.wikipedia.org/wiki/Not_invented_here"  class="postlink">NIH</a>?), ale największą frajdę dają mi takie niskopoziomowe zabawy i poniekąd odkrywanie koła na nowo. Jak próbowałem coś napisać w Python'ie to każdą funkcję (np. operującą na stringach) traktowałem podejrzliwie i zastanawiałem się &quot;czy nie napisałbym tego 'lepiej' po swojemu&quot;.<p>Statystyki: Napisane przez Gość — 30 mar 2015, o 09:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[j23]]></name></author>
<updated>2015-03-28T10:05:03+01:00</updated>
<published>2015-03-28T10:05:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124852#p124852</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124852#p124852"/>
<title type="html"><![CDATA[Re: Początki z C++, kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124852#p124852"><![CDATA[
<div class="quotetitle">mokrowski napisał(a):</div><div class="quotecontent"><br />To prawda. Pan Mirosław Zelent w prosty sposób przedstawia C++. I z czystym sumieniem można polecić ten blog/filmy. Ze starszych totoriali jeszcze ,,Od zera do gier kodera&quot; <!-- m --><a class="postlink" href="http://xion.org.pl/productions/texts/coding/megatutorial/" >http://xion.org.pl/productions/texts/co ... atutorial/</a><!-- m --> oraz (już niestety bardzo leciwy) <!-- m --><a class="postlink" href="http://www.intercon.pl/~sektor/cbx/" >http://www.intercon.pl/~sektor/cbx/</a><!-- m -->.<br />Niestety ze znanych mi tutoriali nie mogę polecić żadnego w języku polskim który na poziomie metodyki ,,podobnej do Zelent'a&quot;, przedstawiał programowanie w C++ nowoczesne, po C++11 i nowsze. Jak by to nie zabrzmiało ,,malkontencko&quot; (a jestem od tego bardzo daleki), od czasów książek podobnych do ,,Symfonia C++&quot;, C++ to już inny język. To nie jest żaden zarzut bo wiem ile czasu potrzeba by przygotować takie tutoriale i jak szybko tracą na aktualności :-/<br /></div><br />Słyszałem i uczyłem się z tych kursów (właściwie nadal się uczę jeśli coś akurat zapomnę), może oprócz tych od Pana Mirosława Zalenta. &quot;Symfonię C++&quot; i &quot;Pasję C++&quot; Pana Grębosza posiadam i jeszcze parę innych książek, ale mniejsza o to. Chciałem podkreślić Kolego Mokrowski, że Ty jako programista posiadasz ten dar przekazywania wiedzy, a nie tylko implementacji dobrych programów. Piszę to całkowicie obiektywnie, po tym co już tutaj zdążyłem zaobserwować na forum.<br /><br /><div class="quotetitle">mokrowski napisał(a):</div><div class="quotecontent"><br />(...)Ja mam na ukończeniu już odcinek o lambdach bo mnie kolega Antystatyczny podpuścił <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /> Jak czas i chęci pozwolą, opublikuję <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br /></div>Trzymam kciuki i niecierpliwie oczekuję &quot;kilku&quot; słów wprowadzenia. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Pozdrawiam! j23 Jarek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4504">j23</a> — 28 mar 2015, o 10:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[D_C]]></name></author>
<updated>2015-03-27T16:44:45+01:00</updated>
<published>2015-03-27T16:44:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124791#p124791</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124791#p124791"/>
<title type="html"><![CDATA[Re: Początki z C++, kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124791#p124791"><![CDATA[
polecam <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />  <!-- m --><a class="postlink" href="http://miroslawzelent.pl/" >http://miroslawzelent.pl/</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1165">D_C</a> — 27 mar 2015, o 16:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-03-26T19:04:05+01:00</updated>
<published>2015-03-26T19:04:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124710#p124710</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124710#p124710"/>
<title type="html"><![CDATA[Re: Początki z C++, kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124710#p124710"><![CDATA[
O kurczę! Bardzo dziękuję za odpowiedź! Bałem się, że nikomu nie będzie się chciało przebrnąć przez ten mój tasiemiec  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> <br /><br />Ad. 1,2,3 - O! Wreszcie coś w tym Ce-pepe co nie wywraca światopoglądu i zachowuje się kulturalnie jak w Cy  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /> <br />Tzn. nie do końca, bo z tym statycznym elementem inicjowanym w konstruktorze to nie mogłem się powstrzymać i jednak mi działa <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> &quot;Dzieło&quot;:<br />[syntax=cpp]#include &lt;iostream&gt;<br />using namespace std;<br /><br />class Klasa {<br />    public:<br />    static int zmienna;<br />    Klasa(){<br />        cout &lt;&lt; &quot;Konstruktor start, zmienna=&quot; &lt;&lt; zmienna &lt;&lt; endl;<br />        zmienna = 2;<br />        cout &lt;&lt; &quot;Konstruktor end, zmienna=&quot; &lt;&lt; zmienna &lt;&lt; endl;<br />    }<br />};<br /><br />int Klasa::zmienna = 1;<br /><br />int main(){<br />    cout &lt;&lt; &quot;Main start, zmienna=&quot; &lt;&lt; Klasa::zmienna &lt;&lt; endl;<br />    Klasa obiekt;<br />    cout &lt;&lt; &quot;Main end, zmienna=&quot; &lt;&lt; obiekt.zmienna &lt;&lt; endl;<br />    return 0;<br />}[/syntax]Wynik:[syntax=bash]Main start, zmienna=1<br />Konstruktor start, zmienna=1                                                                                                                                         <br />Konstruktor end, zmienna=2                                                                                                                                           <br />Main end, zmienna=2[/syntax]Chyba, że przez &quot;inicjalizację w konstruktorze&quot; mam rozumieć tylko i wyłącznie listę inicjalizacyjną? (bo wtedy rzeczywiście kompilator krzyczy)<br /><br />Ad. 6 (singleton i szablony) - tak coś czułem że statyczna flaga wskazująca, że jedyny dopuszczalny obiekt klasy istnieje to mało ambitne rozwiązanie. Znowu te paskudne... <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> Szablony są super! Do momentu kiedy kończy się opis jak zrobić prostą funkcję/klasę szabloniastą i zaczynają się meta-potworki <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Obliczanie silni &quot;szablonowe&quot; jeszcze jako-tako rozkminiłem... ale jak znalazłem kilka &quot;ciekawszych&quot; przykładów to się poddałem.  <br /><br />Ad. 7. Tego <em>constexpr</em> nie &quot;czuję&quot; ani trochę <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> <br />&quot;<em>a*2</em>&quot; - jak to może być stałe wyrażenie dla kompilatora? Jeśli funkcja będzie wywołana ze stałym argumentem to ok w porządku... tyle, że bez <em>constexpr</em> kompilator też ją chyba &quot;wywali&quot; (zauważy, że zwraca stałą wartość). Myślę, że błędnie sobie to zaszufladkowałem na początku i teraz na siłę próbuję dopasować do mojego wyobrażenia, stąd mi nie pasuje. A zaszufladkowałem sobie tak: constexpr oznacza, że wyrażenie jest &quot;obliczalne&quot; na etapie kompilacji, więc kompilator może je policzyć, wychrzanić i wstawić konkretną wartość. Np. &quot;sin(2)&quot; jest stałe na etapie kompilacji, ale &quot;sin(zmienna_o_wartości_nieznanej_w_chwili_kompilacji)&quot; już nie jest <em>constexpr</em> - ale coś nie widzę, że to nie do końca tak <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Cytat z wiki: &quot;<em>C++ has always had the concept of constant expressions. These are expressions such as 3+4 that will always yield the same results, at compile time and at run time.</em>&quot; Jak u licha <em>a*2</em> ma zwracać to samo przy kompilacji i &quot;at run time&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ? <br /><br />Chyba, że <em>constexpr</em> to tylko sugestia dla kompilatora nie obligująca go do niczego (jak inline) i w powyższym przykładzie pomimo mojego <em>constexpr</em> kompilator zauważa, że nie może tego policzyć i olewa const...? Ale wtedy mógłby chociaż jakiś mesydż podrzucić z łaski swojej <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> No i na tej zasadzie to wszystko można by opisać jako stałe wyrażenie, a potem niech gcc sobie wybiera  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /> <br /><br />Asemblera podglądam, ale z/bez <em>constexpr</em> - nie ma różnicy w tym moim przykładzie ;/ <br /><br />---- o moment... chyba coś &quot;łapię&quot; (przynajmniej mniej śnieży)<br />Cytat: &quot;<em>constexpr functions are guaranteed to be evaluated at compile time if all arguments are compile time constants.</em>&quot; (<a href="http://www.cplusplus.com/forum/beginner/159072/"  class="postlink">źródło</a>) - zakładając, że zacytowane zdanie jest prawdziwe (jest ?) - czy można jakoś wymusić na kompilatorze aby krzyczał jeśli funkcja z <em>constexpr</em> nie daje się policzyć?<br /><br />Ad 8. Dobra dobra, faktycznie pojechałem po całości. To pytanie przyszło mi do głowy &quot;przy okazji&quot; przy eksperymentach z <em>constexpr</em> i tak się skupiłem na &quot;szczególe&quot; że nie dostrzegłem oczywistej oczywistości... (nie widzę lasu bo drzewa mi zasłaniają). Także ten... nie było tego pytania  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /> <br /><br />Ad 9. Dziewięć nie ma, bo pytania z grupy &quot;mniej szczegółowe&quot; miały mieć &quot;osobną&quot; numerację  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> jak numeracja pokoi na różnych piętrach  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /> <br /><br />Ad 10. &quot;virtual naucz się i unikaj&quot; <img src="https://forum.atnel.pl/images/smilies/icon_cry.gif" alt=":cry:" title="Płacze" /> A już takie śliczne hierarchiczne maszyny stanów mi się zamarzyły. Tylko nie mów, że da się szablonami  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /> <br />Ok o resztę będę pytał w razie potrzeby jak się oswoję z tym co do tej pory <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez Gość — 26 mar 2015, o 19:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[j23]]></name></author>
<updated>2015-03-26T17:55:11+01:00</updated>
<published>2015-03-26T17:55:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124699#p124699</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124699#p124699"/>
<title type="html"><![CDATA[Re: Początki z C++, kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124699#p124699"><![CDATA[
Przepraszam, że tak bezczelnie podłączę się do dyskusji z lekką dygresją od tematu, ale czy istnieje jakiś kurs Kolegi Mokrowskiego do C++? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> -bo masz Kolego dar do przekazywania wiedzy, a nie każdy to posiada. Nie chodzi mi zaraz o całą &quot;Symfonię C++&quot; Kolegi Mokrowskiego. Wychodzę z założenia, że najistotniejsze jest podać we właściwy sposób wiedzę i ew. źródła gdzie można ją znaleźć w przypadku bardziej rozległych wywodów (których z reguły nie chcę drugi raz pisać).<br /><br />Widziałem tutaj na forum różne Twoje kursy oraz np. porównania języka C i C++ Kolego Mokrowski, ale teraz mam na myśli bardziej całościowe ujęcie tego razem (podkreślam o odwołaniach/linkach tego co już napisałeś).<br /><br />Pozdrawiam! j23 Jarek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4504">j23</a> — 26 mar 2015, o 17:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-03-26T13:08:06+01:00</updated>
<published>2015-03-26T13:08:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124667#p124667</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124667#p124667"/>
<title type="html"><![CDATA[Początki z C++, kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11184&amp;p=124667#p124667"><![CDATA[
Witam <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Zapadła męska decyzja i postanowiłem się zaprzyjaźnić trochę z &quot;embedded&quot; C++... Tzn. na razie to będzie (długo będzie...) raczej taki C-plus-minus / &quot;C z wstawkami ++&quot; <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /> <br /><br />Do rzeczy - odświeżyłem sobie podstawy z kilku &quot;prastarych&quot; ksiąg, przeczytałem poradniki na forum i troszkę wygrzebałem z Internetów. W efekcie powstała lista kilku drobnych pytań i wątpliwości. Z góry dziękuję za wszelką pomoc, podpowiedź, wskazanie źródeł wiedzy, etc...<br /><br /><strong>Primo </strong>- byłbym wdzięczny za wskazanie wszelkich wartościowych materiałów na temat C++ (szczególnie w kontekście łembeded) - poziom zdecydowanie zielono-początkowy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> W Internecie jest sporo materiałów, ale nie chciałbym sobie zrobić &quot;krzywdy&quot; na starcie jakimś poradnikiem &quot;wątpliwej jakości&quot; - a nie mnie oceniać ich jakość. Mile widziane również wskazanie porządnych kodów do &quot;samodzielnej analizy&quot;.<br /><br /><strong>Secundo - pytania &quot;konkretne&quot;:</strong><br />1. Jak wygląda rozmieszczenie składników klasy w pamięci? W C sprawa była prosta - składniki struktury lądowały w pamięci po kolei, ew. dochodził jakiś wypełniacz. A co z klasami? Co jeśli składniki prywatne i publiczne będą pomieszane, np:[syntax=c]class A {<br />   int a,b;<br />public:<br />   int c,d;<br />private:<br />   int e,f;<br />};[/syntax]Kompilator ma prawo zmienić ich kolejność w pamięci? Jak wygląda sprawa z wyrównaniem danych - można &quot;upakować&quot; klasę?<br /><br />2. W C zmienne globalne/statyczne są zerowane -&gt; czy w C++ tworząc globalny obiekt jakiejś klasy, jej składniki też zostaną wyzerowane? Trochę się pobawiłem i z moich obserwacji wynika że tak, ale nie wiem czy to &quot;zasada&quot; czy akurat &quot;tak mi się trafia&quot;. Mój &quot;kod testowy&quot; (testuję w GCC <a href="http://www.tutorialspoint.com/codingground.htm"  class="postlink">online</a>):<br />[syntax=&quot;cpp&quot;]#include &lt;iostream&gt;<br />using namespace std;<br /><br />struct A {<br />    long int a,b,c;<br />    A(){ cout &lt;&lt; &quot;Konstruktor&quot; &lt;&lt; endl; }<br />};<br /><br />A global;<br /><br />int main(){<br />    cout &lt;&lt; &quot;Main&quot; &lt;&lt; endl;<br />    A lokal;<br />    cout &lt;&lt; &quot;Global: &quot; &lt;&lt; global.a &lt;&lt; &quot; &quot; &lt;&lt; global.b &lt;&lt; &quot; &quot; &lt;&lt; global.c &lt;&lt; endl;<br />    cout &lt;&lt; &quot;Lokal: &quot; &lt;&lt; lokal.a &lt;&lt; &quot; &quot; &lt;&lt; lokal.b &lt;&lt; &quot; &quot; &lt;&lt; lokal.c &lt;&lt; endl;<br />    return 0;<br />}[/syntax]Przykładowy wynik powyższego kodu:<br />[syntax=bash]Konstruktor<br />Main                                                                                                                                                     <br />Konstruktor                                                                                                                                                   <br />Global: 0 0 0                                                                                                                                                 <br />Lokal: 2 4197037 1[/syntax]Za każdym razem składniki obiektu globalnego mam wyzerowane. Konstruktor tego nie robi, stąd mój powyższy wniosek - czy słuszny? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />3. Jak rozumieć taki zapis:[syntax=c]volatile klasa obiekt;[/syntax]Jak w C++ traktowany jest obiekt (jakiejś klasy) z atrybutem <em>volatile</em>? Czy <em>volatile</em> przenosi się na składniki obiektu tej klasy?<br /><br />4. Jeżeli tworzę nowy obiekt za pomocą <em>new</em> to najpierw jest wywoływany <em>operator new</em>, a potem <em>konstruktor</em> - zgadza się? A co jeśli przydział pamięci się nie powiedzie - tzn. dokładniej - czy jestem w stanie (tworząc operator new dla swojej klasy) zapobiec wywołaniu konstruktora jeśli nie mogę przydzielić pamięci dla nowego obiektu? (wyjątki schowane na dnie szafy i niech tam pozostaną)<br /><br />5. Wątpliwość dotyczy szablonów funkcji i specjalizacji dla konkretnego przypadku. Poniżej kod testowy - jest szablon funkcji i dwie wersje specjalne (dla int i float). Obie wersje działają tak jak bym chciał (jeśli chodzi o efekty na ekranie), kompilator nie krzyczy, ale przypuszczam, że to jednak nie jest &quot;to samo&quot;. Kod testowy:<br />[syntax=&quot;cpp&quot;]#include &lt;iostream&gt;<br />#include &lt;typeinfo&gt;<br /><br />using namespace std;<br /><br />// Szablon - wersja ogólne<br />template&lt;typename T&gt; void foo(T arg) { <br />    cout &lt;&lt; &quot;Ver. ogólna, &quot; &lt;&lt;  typeid(T).name(); <br />}<br /><br />// Wersja dla int<br />template&lt;&gt; void foo&lt;int&gt;(int arg){<br />    cout &lt;&lt; &quot;Ver. szczegolna int&quot;;<br />}<br /><br />// Wersja dla float (?)<br />void foo(float arg){<br />    cout &lt;&lt; &quot;Ver. szczegolna float&quot;;<br />}<br /><br />int main(){<br /><br />    char a=1;<br />    int b=2;<br />    float c=3;<br />    double d = 4;<br />    <br />    cout &lt;&lt; &quot;foo(char) = &quot;;<br />    foo(a);<br />    cout &lt;&lt; &quot;\nfoo(int) = &quot;;<br />    foo(b);<br />    cout &lt;&lt; &quot;\nfoo(float) = &quot;;<br />    foo(c);<br />    cout &lt;&lt; &quot;\nfoo(double) = &quot;;<br />    foo(d);<br />    cout &lt;&lt; endl;<br /><br />   return 0;<br />}[/syntax]<br /><br />6. Można jakoś zabezpieczyć klasę przed utworzeniem kilku obiektów? (np. ten nieszczęsny jeden ADC w Atmedze). W &quot;Internetach&quot; pojawia się hasło &quot;singleton&quot;, ale nie wiem czy to dobry trop?<br /><br />7. Co łopatologicznie znaczy <em>constexpr</em>? Tu i tak znalazłem opis, że jest to &quot;wyrażenie stałe na etapie kompilacji&quot;... no dobra, ale jak kompilator traktuje ten &quot;constexpr&quot; - jako &quot;zapewniam się kochany kompilatorze, że możesz to policzyć jeśli się postarasz&quot; czy jako &quot;prawdopodobnie możesz to policzyć&quot; czy &quot;jeśli możesz to policzyć to policz&quot;?<br />Spłodziłem np. taki piękny kod:<br />[syntax=c]#include &lt;iostream&gt;<br />#include &lt;typeinfo&gt;<br /><br />using namespace std;<br /><br />constexpr int foo(int arg)  {<br />    return 2*arg;<br />}<br /><br />int main(){<br />    int a;<br />    cin &gt;&gt; a;<br />    cout &lt;&lt; foo(a) &lt;&lt; endl;<br /><br />    return 0;<br />}[/syntax]Co z tym nieszczęsnym <em>constexpr</em> - kompilator tego nie policzy przy pracy (no bo jak), nie powinien więc delikatnie zasugerować, że &quot;miało być stałe przy kompilacji a tu lipa&quot;?<br /><br />8. Przekazuję zmienną ulotną (<strong>a</strong>) do funkcji przyjmującej zwykły int bez jawnego rzutowania - czemu kompilator na to pozwala, przecież obiecywali ścisłą kontrolę typów <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />[syntax=&quot;cpp&quot;]void foo(int arg){<br />    cout &lt;&lt; arg &lt;&lt; endl;<br />}<br /><br />int main(){<br />    volatile int a;<br />    foo(a);<br />    return 0;<br />}[/syntax]<br /><br /><strong>Tercio - pytania mniej konkretne... :</strong><br /><br />10. Jak to jest z tym narzutem dla konkretnych ficzerów z C++. Broń Boże nie chcę powielać baśni ludowych! Chodzi mi raczej o prosty przepis dla początkujących. Taki punkt startowy:<br />- te funkcje stosuj do woli<br />- przy tych pomyśl / doczytaj / poczekaj / zastanów się bo...<br />- te są bee i ani-misie-wasz!<br /><br />Empirycznie sprawdziłem, że wszystkie moje programy napisane w &quot;Cy&quot;, które skompilowały się w &quot;Cy-py-py&quot; były mniejsze od oryginałów w &quot;Cy&quot; - głównie za sprawę mądrzej dobranych rozkazów _call/_jmp. <br /><br />Wydaje mi się, że elementy takie jak: szablony, przeładowanie nazw, argumenty domyślne, klasy - przy odrobinie ostrożności wprowadzają praktycznie pomijalny narzut (jeśli w ogóle jakiś wprowadzą). <br /><br />Co jest w następnym kroku? Chyba dziedziczenie/funkcje wirtualne - próbowałem przebrnąć przez mądre opisy o <em>vtable'ach</em> ale mnie to pokonało... Można jakoś pi*drzwi określić jakie konstrukcje jaki narzut powodują?<br /><br />Z tego co się naczytałem to wyjątków raczej należy unikać. Są inne ficzery paskudne z definicji <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />?<br /><br />11. Jak się przyzwyczaić do referencji, tzn. obawiam się, że analizując kod będę miał podejście &quot;typu C&quot;. Tj. widząc wywołanie funkcji z argumentem <strong>bez</strong> &quot;&amp;&quot; podświadomie zakoduję, że - ona nie modyfikuje argumentu bo pracuje na kopii. Są jakieś sprawdzone sposoby jak się przestawić i nie wpadać w taką pułapkę?<br /><br />Finito tymczasowo <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Pozdrawiam Wojtek<p>Statystyki: Napisane przez Gość — 26 mar 2015, o 13:08</p><hr />
]]></content>
</entry>
</feed>