Das ist das Ende von C++!
-
rüdiger schrieb:
Und warum ist dann 10 keine Instanz von java.lang.Integer? (bzw. const java.lang.Integer oder kann man etwa so etwas machen "abc".erase(1);?)
Wer sagt denn das es nicht so ist ? Prinzipiell ist eine 10 nach wie vor ein primitiver Datentyp. Seit Java 5 wurde allerdings Autoboxing/Unboxing eingeführt, d.h. du kannst ein Integer-Literal genauso wie ein Integer-Objekt benutzen.
-
Worüber es eigentlich keinen Diskussionsbedarf gibt, ist dass die Exceptionbehandlung in C++ viel schlechter ist, als die von Java.
-
Optimizer schrieb:
...Java übergibt *immer* eine Kopie. ...
Echt ?
Wo wird denn in meinem Beispiel bei Java (für Klassentypen) eine Kopie erzeugt ? (also so richtig mit "2mal im Speicher" und so)Also das habe ich anders gelernt.
Ach ja: Und das Argument "Das haben die halt so gemacht" (bzgl "string") entkräftet irgendwie die Kritik "Das ist aber schlecht" nicht so recht, oder ?
"So gemacht" wurde, dass Strings unveränderlich sind, aber ich habe hier nirgendwo Kritik diesbzgl. gelesen.[/quote]
Naja, irgendwann ist immer das erste Mal.
Ach ja, noch eine Nachfrage: Wenn das eine "ganz normal designte Klasse" ist .... wie muss ich als Normalentwickler denn meine Klasse stricken, damit sie genauso wie string arbeitet ? Auch so in Zusammenarbeit mit "+" und "=" ?Aber nochmal:
- Ich habe nicht das Thema "string und eingebaute Typen" aufgebracht
- Es geht mir darum, ob mit D in diesem Zusammenhang ein Fortschritt erreicht wird oder nicht.
- Java und C++ dienen mir dabei lediglich als "Erfahrungspool" ... nicht als eigentliches Streitobjekt.
- Ich sähe es für D als einen Vorteil, wenn sie von der Sonderstellung "eingebauter Typen" abrückten ....
- ... gerade, weil sie umfangreich templates unterstützen (soll).Gruß,
Simon2.
-
Simon2 schrieb:
Optimizer schrieb:
...Java übergibt *immer* eine Kopie. ...
Echt ?
Wo wird denn in meinem Beispiel bei Java (für Klassentypen) eine Kopie erzeugt ? (also so richtig mit "2mal im Speicher" und so)Also das habe ich anders gelernt.
Hättest du mal richtig gelernt. Bei Java wird nicht das Object, sondern ein Zeiger darauf übergeben und dieser Zeiger ist eine Kopie des Original(zeiger)s.
Programmier doch mal mit Javascript, da ist alles vom Typ var. Es gibt kein int usw.
-
Optimizer schrieb:
Oder man macht es halt so wie es in C++ aktuell ist: Man freut sich darüber, dass man gar nichts hat. Das ist aber eine Einstellung die ich nur bedingt nachvollziehen kann.

Dinkumware schrieb:
for_each
template<class InIt, class Fn1> Fn1 for_each(InIt first, InIt last, Fn1 func);The template function evaluates func(*(first + N)) once for each N in the range [0, last - first). It then returns func.
Wieso meinen eigentlich immer Alle, es gäbe kein "foreach" in C++? Es ist zwar auf einer "freestanding"-Implementierung nicht vorhanden, aber zur Standardbibliothek gehört es doch... Wenn du jetzt sagst, dass man dafür Iteratoren braucht - oder Objekte, die sich so verhalten, z.B. Zeiger - : In C# muss man ja auch - wie du selber sagst - ein Interface dafür implementieren:
Optimizer schrieb:
Es ist in C#, einer objektorientierten Programmiersprache, der übliche Weg, Schnittstellen zu definieren.
Felix :xmas2:
P.S.:
EchterCoder schrieb:
Wer braucht schon nen GC, ist doch was für Kinder.


-
Phoemuex schrieb:
...Es ist zwar auf einer "freestanding"-Implementierung nicht vorhanden, ...
und selbst das ist IIRC nicht der Fall: Es ist nur erlaubt, sie da wegzulassen.
Ich bin ja mal gespannt, welchen Komfort D auf solchen Systemen bieten wird....Gruß,
Simon2.
-
Simon2 schrieb:
Phoemuex schrieb:
...Es ist zwar auf einer "freestanding"-Implementierung nicht vorhanden, ...
und selbst das ist IIRC nicht der Fall: Es ist nur erlaubt, sie da wegzulassen.
Genau so isses.
Simon2 schrieb:
Ich bin ja mal gespannt, welchen Komfort D auf solchen Systemen bieten wird....
*g*
-
Es ist zwar auf einer "freestanding"-Implementierung nicht vorhanden,
Was soll das heißen?
-
Dass gewisse Teile des C++ Standards für eine "freestanding implementation" optional sind. Dazu gehört z.B. std::string und std::vector.
Two kinds of implementations are defined: hosted and freestanding. For a hosted implementation, this International Standard defines the set of available libraries. A freestanding implementation is one in which execution may take place without the benefit of an operating system, and has an implementationdefined set of libraries that includes certain languagesupport
libraries (17.4.1.3).
-
Hem... also wenn ich mir so den zweiten Satz durchlese, passt das mit deinem "Optional" nicht. Oder ich verstehe unter Optional was anderes? Optional heißt für mich, das ich es ab- und anwählen kann und somit nicht vorhanden sein kann. (z.B. ich bestlle eine Ausstattung bei einem Auto, lasse aber die Klimaanlage weg, halt Option)
Aber der zweite Satz über freestanding sagt das doch garnicht aus? Er besagt (wenn ich es richtig interpretiere) das die Implementierung auf einer anderen Bibliothek bzw. anderen Code basieren kann. Z.B. kann ich mir vorstellen, das std::basic_string mittels der ganzen C-Style-Stringfunktionen implementiert wird. Und das z.B. einige Funktionen selbst programmiert werden, ohne z.B. direkt die OS-API zu nutzen. Also das jemand freie Hand über die Implementierung hat.
freestanding heißt ja "freistehend", also dem Implementierer ist es frei über die Implementierung zu bestimmen.
Aber das z.B. string und vector einfach nicht mitgeliefert werden können, das kann ich daraus nicht lesen.
-
Optional im Sinne von "muss nicht aber kann".
Aber mal etwas mehr quoten um sicher zu gehen:
A freestanding implementation has an implementationdefined set of headers. This set shall include at least the following headers, as shown in Table 13:
Table 13 listet das auf:
<cstddef>
<limits>
<cstdlib>
<new>
<typeinfo>
<exception>
<cstdarg>Und noch einen Zusatz:
The supplied version of the header <cstdlib> shall declare at least the functions abort(), atexit(), and exit() (18.3).
(wobei ich die Forderung von <new> eigentlich schon albern finde. Eine freestanding implementation in C fordert nichtmal malloc und co. Vielleicht kann mir das ein C++ler erklären)
-
TactX schrieb:
(wobei ich die Forderung von <new> eigentlich schon albern finde. Eine freestanding implementation in C fordert nichtmal malloc und co. Vielleicht kann mir das ein C++ler erklären)
Geht wohl eher um Placement-New. Sprich das man Objekte in Speicher konstruieren kann, weniger um Speicherallokierung.
-
Klingt interessant. Magst das mal einem Cler genauer erklären?
-
TactX schrieb:
Klingt interessant. Magst das mal einem Cler genauer erklären?
Ist ganz simpel
class Foo { public: Foo() { std::cout << "Foo()\n"; } }; int main() { char buffer[sizeof(Foo)]; Foo *ptr = new (buffer) Foo; }Damit erstellt man ein Objekt in einem beliebigen Speicher-Block (der natürlich eine entsprechende Größe haben sollte :))
-
Ah, ok. Dann macht das natürlich Sinn. Danke dir

-
rüdiger schrieb:
int main() { char buffer[sizeof(Foo)]; Foo *ptr = new (buffer) Foo; }in C würde das so aussehen:
int main() { char buffer[sizeof(struct Foo)]; struct Foo *ptr = (struct Foo*)buffer; }
:xmas2:
-
ten schrieb:
rüdiger schrieb:
int main() { char buffer[sizeof(Foo)]; Foo *ptr = new (buffer) Foo; }in C würde das so aussehen:
int main() { char buffer[sizeof(struct Foo)]; struct Foo *ptr = (struct Foo*)buffer; }
:xmas2:Dabei wird dann aber kein Konstruktor aufgerufen - ok, den gibts in C ja sowieso nicht, aber das ist halt der Sinn des placement-news, oder?
Felix :xmas2:
-
Eher so die Richtung, wenn man die Abläufe originalgetreu übertragen will

int main() { char buffer[sizeof(struct Foo)]; struct Foo *ptr = (struct Foo*)buffer; init_Foo(ptr); }:xmas2:
-
Sagt mal, ist das jetzt das Ende von C++? Ich will jetzt nicht alles lesen.
-
Nein. Es ist vielmehr das Ende von D *duck*