void pointer Frage
-
sagte doch das buch ist nicht zielführend...
-
no_code schrieb:
sagte doch das buch ist nicht zielführend...
In welchem Zusammenhang stellst du jetzt diese Behauptung auf?
-
findest du das buch nicht ein bichen zu umfangreich mit zuviel text und zuwenig infos?
-
http://www.cppreference.com/wiki/operator_precedence
Dieser Cast-Operator und der Dereference-Operator haben die gleiche Priorität (3).
Bei gleicher Priorität (3) ist die Abarbeitungsreihenfolge right-to-left.
D.h.: Es wird zuerst gecastet und dann dereferenziert.Und wie wxSkip bereits erwähnte, stürtzt das Programm, in dieser Art, in den meisten Fällen ab, und zwar einfach deswegen, da dein Pointer irgendwo hinzeigt, wo er gerade Bock drauf hat ... in deinem Fall hast du wohl Glück.
no_code schrieb:
sagte doch das buch ist nicht zielführend...
Augen auf, Mund zu :p ---> In dem Beispielcode des Primers zeigt der Pointer auf eine zuvor definierte Variable.
-
Dweb schrieb:
no_code schrieb:
sagte doch das buch ist nicht zielführend...
Augen auf, Mund zu :p ---> In dem Beispielcode des Primers zeigt der Pointer auf eine zuvor definierte Variable.
ich sagte auch nicht das buch sei falsch...
edit: naja wobei über die klammern kann man dann ja diskutieren
-
Dweb schrieb:
Dieser Cast-Operator und der Dereference-Operator haben die gleiche Priorität (3).
Bei gleicher Priorität (3) ist die Abarbeitungsreihenfolge right-to-left.
D.h.: Es wird zuerst gecastet und dann dereferenziert.Warum einfach, wenn es auch kompliziert geht?
Es gibt bei mehreren unären Prefix-Operatoren überhaupt keine Mehrdeutigkeit, die man auflösen müsste: op1 op2 x heißt immer op1 (op2 x). (op1 op2) x ist syntaktisch sinnlos.
Prioritäten ergeben nur Sinn, wenn es Mehrdeutigkeiten gibt, z.B. bei *x++. Heißt das jetzt (*x)++ oder *(x++)? (Letzteres).
Assoziativitäten ergeben nur Sinn bei mehrstelligen Operatoren. Heißt a = b = c jetzt (a = b) = c oder a = (b = c)? (Letzteres, = ist rechtsassoziativ).
-
no_code schrieb:
findest du das buch nicht ein bichen zu umfangreich mit zuviel text und zuwenig infos?
CXXPrimer::GetInstance().Text().substr(Beispieltext.start(), Beispieltext.length()).IsInfo() == true

-
wxSkip schrieb:
CXXPrimer::GetInstance().Text().substr(Beispieltext.start(), Beispieltext.length()).IsInfo() == true

Der Code legt nahe, dass es nur ein Exemplar des Primer gibt. Das ist falsch.
Am besten greifst du so darauf zu:PersonalLibraryManager::findBook("C++ Primer").take()->[usw];
-
l'abra d'or schrieb:
wxSkip schrieb:
CXXPrimer::GetInstance().Text().substr(Beispieltext.start(), Beispieltext.length()).IsInfo() == true

Der Code legt nahe, dass es nur ein Exemplar des Primer gibt. Das ist falsch.
Am besten greifst du so darauf zu:PersonalLibraryManager::findBook("C++ Primer").take()->[usw];(Das vorher war die Internetausgabe
)
Noch besser wird's:home::shelf<Objects::Book>::iterator iter = Bookshelf.findBook("C++ Primer", Language::English); if(iter == Bookshelf.end()) { try { iter = Bookshelf.AddBook(*(Objects::Book*)this->Buy(Buyable::Book, "C++ Primer", Language::English); } catch(LowMoneyException err) { std::cout << "Zu wenig Geld für den Kauf des C++ Primers vorhanden" << std::endl; break; } catch(NotAvailableException err) { std::cout << "Den C++ Primer gibt es momentan nicht zu kaufen" << std::endl; break; } } std::cout << iter->GetRawText().substr(Beispieltext.RawTextStart(), Beispieltext.RawTextLength()).IsInfo() << std::endl; //Ausgabe: "1\n"
-
