![]() |
Delphi-Version: XE8
Verständnisfrage Umstellung c++ struct
Code:
Bezieht sich das "this" in der inlined Funktion in diesem Fall auf die struct selbst oder auf die eingebundene Funktion?
struct mystruct
{ int index; inline char * const name( void ) const { return ((char *)this) + index; } int range; }; Bei der Umstellung nach Delphi wäre es ja dann entweder die Adresse der struct oder struct + 4 Bytes (aufgerund des ersten structmembers Index). Tue mir da irgendwie gerade schwer mit. :? |
AW: Verständnisfrage Umstellung c++ struct
Um die Frage zu beantworten: Auf die Struktur. Das sieht du, z.B. im Visual Studio, auch beim draufhalten mit der Maus.
Die Struktur an sich verstehe ich aber überhaupt nicht. Zwei Integer und eine Methode sich selbst auf einen Char-Pointer zu casten. Das macht keinen Sinn. Es könnte Sinn machen, wenn in der Struktur noch mehr enthalten wäre (z.B. ein Char-Array) und du uns das verschweigst ;-) |
AW: Verständnisfrage Umstellung c++ struct
Hallo,
wer hat behauptet C/C++ würde Sinn machen. mfg |
AW: Verständnisfrage Umstellung c++ struct
Danke das hatte ich mir schon gedacht. Dann scheitert es wahrscheinlich an meiner Deklaration der inlined Funktion.
Die struct ist tatsächlich etwas komplexer enthält allerdings kein Char Array. Name ermittelt anhand des Indexes, wie der Name schon erahnen lässt, den einen Namen, der in einem anderen Speicherbereich liegt. |
AW: Verständnisfrage Umstellung c++ struct
Zitat:
|
AW: Verständnisfrage Umstellung c++ struct
Es macht schon Sinn, da der Name bereits woanders im Speicher vorhanden ist und so nicht doppelt abgelegt wird. Er wird somit nur ermittelt und die Methode Name dient als Verweis.
|
AW: Verständnisfrage Umstellung c++ struct
Hallo,
welcher Name ist jetzt bereits abgelegt? Der Name einer Methode (Funktion) wird eigentlch nirgends abgelegt. Ich dachte immer der Name einer Methode spielt für den Programmierer eine Rolle, der Compiler ersetzt das ganze durch eine Speicheradresse. Aus meiner Sicht ist C/C++ eine Programmiersprache, wo es eigentlich nicht mehr um zielorientierte Programmierung geht, sondern nur um Verwirrung. Noch besser ist allerdings perl, zumindestens in diesem Gebiet. mfg |
AW: Verständnisfrage Umstellung c++ struct
Zitat:
Zitat:
Ein Zeiger oder eine Referenz auf den Namen (einen String, kein Char-Zeiger) hätten es vermutlich auch getan. Es sei denn, du hast da einen hochoptimierten, weggekapselten Programmteil. Zitat:
|
AW: Verständnisfrage Umstellung c++ struct
Zitat:
|
AW: Verständnisfrage Umstellung c++ struct
Hallo,
dann ist (sind) Delphi wohl auch zwei Programmiersprachen (Pascal und ObjectPascal), wobei Delphi eigentlich nur eine Entwicklungsumgebung meint. C (als funktionale) und C++ (als objektorientierte) mögen zuweilen schneller ausgeführt werden, als Delphi-Quellcode, aber die Lesbarkeit (zumindestens im Durchschnitt) würde hier klar an Delphi (ObjectPascal) gehen. In C/C++ sind Konstrukte möglich, die ich trotz Informatikstudium schon fast nicht mehr verstehen kann (Es dauert zuweilen zumindestens Stunden bis ich das nachvollzogen habe). Es gibt aus meiner Sicht Programmiersprachen, die den Entwickler geradezu auffordern unleserlich Code zu fabrizieren (C und C++, Perl) und welche die von Grund auf Lesbar sind (Delphi / Java). mfg |
AW: Verständnisfrage Umstellung c++ struct
@frankyboy1974
Prinzipiell geb ich dir schon recht, dass Delphi ím Schnitt einfacher und lesbarer ist als C oder C++. Aber wenn solche Hammer-Aussagen kommen wie anfangs von dir... :mrgreen: |
AW: Verständnisfrage Umstellung c++ struct
Hach ja ... C ist prozedural, nicht funktional.
Das Schöne an C++ ist imho, das man mächtige Abstraktionen und Domänen-spezifische Konstrukte als Bibliotheken schaffen kann, die teilweise völlig ohne Laufzeit-Overhead auskommen. Ein einfaches Beispiel sind unique_ptr, aber auch Expression-Templates. Man sollte das natürlich nicht übertreiben und nicht versuchen, zu clever zu sein; insbesondere wenn man gerade den Anwendungsprogrammierer-Hut auf hat. Deswegen gibt es Styleguides, Linter und statische Analysewerkzeuge, die einem dann auf die Finger hauen. |
AW: Verständnisfrage Umstellung c++ struct
Die Inline-Funktion ermittelt einen Char-Zeiger auf einen Speicherbereich, der um den Wert von index hinter den Strukturbeginn liegt. Vermutlich muss in index ein Wert >= 8 enthalten sein, damit etwas Vernünftiges dabei herauskommt.
Hier wird übrigens kein Typ definiert, sondern die Struktur selbst (sonst stände "typedef" davor). Und zu der Delphi vs. C/C++-Rangelei: Wenn jemand geschickt genug ist, schafft er es in jeder Programmiersprache unleserlichen Code zu schreiben. Und... Ein Programmierer, der diesen Namen verdient schreibt in jeder Sprache Programme, die durchschaubar sind (mein Tipp: Der Urheber der genannten Struktur gehört nicht dazu). |
AW: Verständnisfrage Umstellung c++ struct
Zitat:
Das ist in C++ nicht nötig. |
AW: Verständnisfrage Umstellung c++ struct
hallo,
Zitat:
mfg |
AW: Verständnisfrage Umstellung c++ struct
Hatte den PAnsiChar Cast falsch :oops:.
Naja kann passieren. Die Delphi vs C vs C++ Diskussion finde ich lustig, damit hätte ich in diesem Thread nicht gerechnet. :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz