Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
wanne
- Moderator
- Beiträge: 7548
- Registriert: 24.05.2010 12:39:42
Beitrag
von wanne » 27.06.2014 09:11:06
schorsch_76 hat geschrieben:Das mit dem printf habe ich nur genutzt um beide Teile vergleichbar zu halten und nur auf das Feature zu gehen.
Nein. War es nicht. Ist aber egel.
schorsch_76 hat geschrieben:Ganz genau. Jetzt hast du es begriffen. Der ganze Aufwand war es, Typsicher den Compiler die Berechnung der Konstante machen zu lassen (constexpr) aber zur Laufzeit einfach einen double zu verarbeiten.
Meine Programme schmeisen aber typischerweise keine Statischen ergebnisse. Dazu fange ich normalerweise nicht an nen Compiler anzuwerfen. Soche Programme sind im Normalfall Sinnlos. Wenn ich die durchschnittsgeschwiniigkeit über eine Stunde ausrechen will schreibe ich garantiert keine 85 Zeilen Code. – Das ist Fehleranfällig.
rot: Moderator wanne spricht, default: User wanne spricht.
-
schorsch_76
- Beiträge: 2601
- Registriert: 06.11.2007 16:00:42
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von schorsch_76 » 27.06.2014 11:09:54
Hier ist noch ein echtes nützliches Beispiel das nicht nur user defined literals zeigt, sondern type rich interface.
37863
Damit kann ich, auch auf einem embedded Device, sicher stellen, dass ich immer richtig digits zu Spannung / Strom wandle. Im Kompilat rechne ich auch hier nur mit double. Der Compiler stellt sicher, dass ich ein "digit_from_dac2" nicht in eine Spannung wandle.
-
schorsch_76
- Beiträge: 2601
- Registriert: 06.11.2007 16:00:42
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von schorsch_76 » 27.06.2014 13:48:29
Oh ... noch ein Nachtrag:
37864
Code: Alles auswählen
g++ -std=c++11 -O2 -s electric-conversion.cpp -o electric-conversion
georg@machariel ~/Dokumente/Entwicklung/c++11-snipets/type-rich-interface $ ls -la
insgesamt 20
drwxr-xr-x 2 georg users 4096 27. Jun 13:44 .
drwxr-xr-x 5 georg users 4096 27. Jun 13:00 ..
-rwxr-xr-x 1 georg users 6264 27. Jun 13:44 electric-conversion
-rw-r--r-- 1 georg users 3545 27. Jun 13:42 electric-conversion.cpp
georg@machariel ~/Dokumente/Entwicklung/c++11-snipets/type-rich-interface $ ldd electric-conversion
linux-vdso.so.1 (0x00007fff25388000)
libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.0/libstdc++.so.6 (0x00007fd2b3b61000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd2b3867000)
libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.0/libgcc_s.so.1 (0x00007fd2b3650000)
libc.so.6 => /lib64/libc.so.6 (0x00007fd2b32a0000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd2b3e76000)
Auch die Version welche gegen die libstc++ linkt ist nicht groß.
Wenn ich versuche vom adc2 eine Spannung zu lesen, kommt
Code: Alles auswählen
g++ -std=c++11 -O2 -s electric-conversion.cpp -o electric-conversion
electric-conversion.cpp: In Funktion »int main(int, char**)«:
electric-conversion.cpp:148:26: Fehler: Umwandlung von »{anonym}::digits_from_adc2« in nicht-skalaren Typen »uri::U {aka uri::Value<uri::Unit<1, 0> >}« angefordert
U u3 = digits_from_adc2(); // error
Das ist dann doch sehr deutlich.