Einführung in Zuweisungen in C++ im Rahmen der Lehre des Programmierens. (C++, Zuweisung, Zuweisungen, Linkswert), Lektion, Seite 720855
https://www.purl.org/stefan_ram/pub/c++_zuweisung_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

Mehr über Zuweisungen in C++

Undefiniertes Verhalten

Zwei Schreibzugriffe

Ein Programm, in dem zwei Schreibzugriffe auf ein Objekt stattfinden, für die es keine festgelegte zeitliche Reihenfolge gibt, hat undefiniertes Verhalten.

Die Reihenfolge der Auswertung von Operanden eines Operators ist in C++  im allgemeinen nicht  festgelegt.

main.cpp

#include <iostream> // ::std::cout
#include <ostream> // <<
#include <string> // ::std::string

using namespace ::std::literals;

int main()
{ int v = 1;
::std::cout <<( v = 2 )<<( v = 3 )<< "\n"s; }

Protokoll
22
main.cpp

#include <iostream> // ::std::cout
#include <ostream> // <<
#include <string> // ::std::string

using namespace ::std::literals;

int main()
{ int v = 1;
::std::cout <<( v = v + 1 )<<( v = v + 1 )<< "\n"s; }

transcript
33

Zur Korrektur dieses Fehlers teile man die Schreibzugriff so auf mehrere Auswertungsanweisungen auf, daß jede Auswertungsanweisung nur einen Schreibzugriff enthält. Die Reihenfolge des Auswertung von Anweisungen, welche direkt im selben Block stehen, ist  festgelegt.

main.cpp

#include <iostream> // ::std::cout
#include <ostream> // <<
#include <string> // ::std::string

using namespace ::std::literals;

int main()
{ int v = 1;
::std::cout <<( v = 2 );
::std::cout <<( v = 3 )<< "\n"s; }

Protokoll
23
main.cpp

#include <iostream> // ::std::cout
#include <ostream> // <<
#include <string> // ::std::string

using namespace ::std::literals;

int main()
{ int v = 1;
::std::cout <<( v = v + 1 );
::std::cout <<( v = v + 1 )<< "\n"s; }

transcript
23

Schreib- und Lesezugriff

Auch ein Programm, in dem ein Schreibzugriff und ein Lesezugriff auf ein Objekt stattfinden, für die es keine festgelegte zeitliche Reihenfolge gibt, hat undefiniertes Verhalten.

main.cpp

#include <iostream> // ::std::cout
#include <ostream> // <<
#include <string> // ::std::string

using namespace ::std::literals;

int main()
{ int v = 1;
::std::cout <<( v = v + 1 )<< v << "\n"s; }

transcript
22

Zur Korrektur dieses Fehlers teile man die beiden Zugriffe auf mehrere Auswertungsanweisungen auf.

main.cpp

#include <iostream> // ::std::cout
#include <ostream> // <<
#include <string> // ::std::string

using namespace ::std::literals;

int main()
{ int v = 1;
::std::cout <<( v = v + 1 );
::std::cout << v << "\n"s; }

transcript
22
Zitate *
Except where noted, evaluations of operands of individual operators and of subexpressions of individual expressions are unsequenced.” – C++  2017 1.9 15
If a side effect on a memory location is unsequenced relative to either another side effect on the same memory location or a value computation using the value of any object in the same memory location … the behavior is undefined.” – C++  2017 1.9 15

PS: Seit C++17 ist die Reihenfolge der Auswertung der Operanden von »<<« definiert, und daher hat die Auswertung von »::std::cout <<( v = v + 1 )<< v« nun kein  undefiniertes Verhalten mehr! (Siehe auch: http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2016/p0145r1.pdf)

Undefiniertes Verhalten

Es gibt in C++  vier verschiedene Möglichkeiten, wie das Verhalten eines Programmteils gegeben sein kann.

definiert: das Verhalten (hier: der Wert) ist durch C++  definiert
1 + 2
unspezifiziert: Es gibt eine Auswahl verschiedener Verhalten, welches davon sich bei der Auswertung manifestiert ist nicht festgelegt, das Verhalten (hier: der Wert) des folgenden Ausdrucks ist weder von C++  noch von einer Implementation spezifiziert
rand()
undefiniert: Es kann alles mögliche passieren (Programmabbruch, Festplattenlöschung, Auslösung einer Katastrophe …), undefiniertes Verhalten ist normalerweise ein schwerer Fehler
{ int a; ::std::cout << a; }

n3290 4.1: “A glvalue (…) can be converted to a prvalue. (…) if the object is uninitialized, a program that necessitates this conversion has undefined behavior. 

Mehrfache Schreibzugriffe  auf ein Objekt innerhalb eines einzigen Ausdrucks  sind ebenfalls undefiniertes Verhalten !

Beispiel für undefiniertes Verhalten
::std::cout <<( i = i + 1 )<<( i = i + 1 )<< '\n';

moegliche Verhinderung des undefinierten Verhaltens
::std::cout <<( i = i + 1 );
::std::cout <<( i = i + 1 )<< '\n';

Beispiel für undefiniertes Verhalten
::std::cout <<( i = i + 1 )<< i << '\n';

moegliche Verhinderung des undefinierten Verhaltens
::std::cout <<( i = i + 1 );
::std::cout << i << '\n';

Beispiel für undefiniertes Verhalten
i =( i = i + 1 )+ 7;

moegliche Verhinderung des undefinierten Verhaltens
i = i + 1;
i = i + 7;

C++14 clause 1 section 9 paragraphs 13 – 15 (gekürzt und leicht überarbeitet)
If a side effect on a scalar object is unsequenced relative to either another side effect on the same scalar object or a value computation using the value of the same scalar object, and they are not potentially concurrent (1.10), the behavior is undefined.
[Note: The next section imposes similar, but more complex restrictions on potentially concurrent computations. – end note]

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram720855 stefan_ram:720855 C++, Zuweisung, Zuweisungen, Linkswert kostenlos, kostenlose, kostenloses, kosten los, kosten lose, kosten loses, gratis, free, frei, freie, freies, privat, private, privates, homepage, home-page, home page, website, web site, webpage, web-page, web page, webpages, web-pages, web pages, webseite, Web-Seite, Webseite, Webseiten, Web-Artikel, Web Artikel, online, on-line, on line, download downloaden, down load, or, deutsch, deutsche, deutsches, deutscher, Deutschland, deutschsprachig, deutschsprachige, deutschsprachiges, german, germany, and, uebersicht, Uerbersicht, uebersichten, Uebersichten, Übersicht, übersicht, Übersichten, übersichten, Uebersicht, uebersicht, Uebersichten, uebersichten, Info, Infos zu, Information über, ueber, Informationen über, Auskunft, Auskünfte, Auskuenfte, Dienst, PbclevtugFgrsnaEnz, Angebot, Angebote, Anbieter, server, für, fuer, in, an, keyword, keywords, key word, keywords, internet, internets, net, network, net work, networks, net works, web, www, world wide web, Theorie, Praxis, Anwendung, DV, IT, glossar, fachwörterbuch it-glossar, computer lexikon, Computerlexikon, Computer-Lexikon, Lexikon, computer lexicon, Computerlexicon, Computer-Lexicon, Lexicon, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 was ist ein, was ist das, was sind, definiere, definition, define, Inhalt, html, xhtml, free im netz, PDF Text, digital, digitale, binär, binäre, elektronisch, elektronische, fachbegriff, fachbegriffe, konzept, Begriff, allgemein, allgemeine, allgemeines, Technik, Datentechnik, Digitaltechnik, Binätechnik, online lesen; , Einführung, Einfuehrung, Einführungen, Einfuehrungen, eLearning-Modul, e-Learning-Modul, eLearning-Module, e-Learning-Module, Kurs Berlin, Kurse Berlin, Kursus, Vortrag, Vorträge, Vortraege, Lehrgang, Lehrgänge, Lehrgaenge, kostenloses Lehrmaterial, kostenlose Lehrmaterialien, Vorlesung, Vorlesungen, Unterrichtseinheit, Unterrichtseinheiten, kostenloses Unterrichtsmaterial im Internet, kostenlose Unterrichtsmaterialien im Internet, Ausbildung, Ausbildungen, für die Ausbildung, Fortbildung, Fortbildungen, Weiterbildung, Weiterbildungen, Schulung Berlin, Schulungen Berlin, Internetschulung, Webschulung, Kursunterlage, Kursunterlagen, trainer Berlin, Didaktik, Informatikunterricht, Primer, Skript FH, Skripte FH, Skriptum FH, Skripts FH, Script FH, Scripte FH, Scriptum FH, Scripts FH, howto, how-to, how to, Lehrbuch, Buch, Bücher, Buecher, Bericht, Crash Kurs Berlin, Crash-Kurs Berlin, Crashkurs Berlin, Report, Sachtext, Sachtexte, Übung, Übungen, Uebung, Uebungen, course, PbclevtugFgrsnaEnz, lecture note, lecture notes, Tutorial, Tutor, Tutorium, Teacher, Lehrer Berlin, Trainer Berlin, Beratung Berlin, Anleitung zum, Anleitungen zum, Einführung, Einfuehrung, Einführungen, Einfuehrungen, Handbuch für, Handbücher, Handbuecher, Support, Diplomarbeit, Facharbeit, Hausarbeit, Hausarbeiten, Werk, Werke, Text, Übungsblatt, Uebungsblatt, Lösung, Loesung, Lösungen, Loesungen, Auflösung, Aufloesung, Auflösungen, Aufloesungen, Facharbeit, Facharbeiten, Forum, Training, manual, Folie, Folien, Lehrmittel, beratung, Definition von, Allgemeine Erklärung, Allgemeine Erklaerung, Allgemeine Erklärungen, Allgemeine Erklaerung, Allgemeine Erklaerungen, Einfache Erklärung einfach, Einfache Erklaerung einfach, Einfache Erklärungen, Einfache Erklaerung, Einfache Erklaerungen, zum Thema, FAQ, FAQs, Konzept, Lernkurs, Lern-Kurs, Lernkurse, Lern-Kurse, eine kurze Erklärung, Begriff, Begriffe, Erklärung zu Begriffen, begriffbestimmung, begriffbestimmung, Begriffsbestimmung, Begriffserklärung, Begriffserklaerung, Wort, Worterklärung, Worterklaerung, Definition, Beispiel, Beispiele, Bedeutung, Bedeutungen, was bedeutet, Begriffsdefinition, für Anfänger, fuer Anfaenger, für Einsteiger, für Beginner, zum selber Lernen, handout, hand out, web based training, WBT, Net Based Training, NBT, computer based training, CBT, virtual learning environment, virtual university, für die Schule, Seminar, Seminare, Vorgehensweise, Pädagogik, Paedagogik, Akademie, Onlineacademie, Onlineakademie, Wissen, Unterrichtsvorbereitung für das Fach, Unterricht, für Lehrer, für Lehrerinnen, Referat, Referate, Hausaufgabe, Hausaufgaben, Tip, Tipp. Tipps und Tricks, Tips und Tricks, Methode, Methoden, Methodik, Funktion, Funktionsweise, Aufbau, Prinzip, Grundlage, Grundlagen, Internetschulung, Unterlage, Unterlagen, Struktur, Frage, Fragen, Antwort, Antworten, Schulunterricht, zum erlernen, was ist das?, wie?, lerne, Onlineausbildung, Onlinelehrgang, Onlinekurs, Onlinebuch, Webbuch, Academy, Fachhochschule, FH, TFH, Hochschule, Universität, Universitaet, Uni, Schule, Berufsschule, Gymnasium, Erste Schritte mit, Dozent, Dozenten, Zusammenfassung, Übersicht, Term, Fachwort, Fachbegriff, Fachbegriffe, Grundbegriff, Grundbegriffe, Lektion, Lektionen, Bedienungsanleitung, Bedienungsanleitungen, Spezialist, Spezialisten, Coaching, Coach, Fachbuch, technologie, Unterschied zwischen, Unterschiede zwischen, lehren, unterrichten, für das Studium, für Studenten, für Studentinnen, für Studierende, für Schüler, für Schülerinnen, Wie kann ich, Wie kann man, Hilfe, selber, erstellen, Erstellung, Beginner, Online-Seminar, Online-Kurs, Online-Schulung, ich, gebrauchsanweisung, gebrauchsanleitung, Bedienungsanweisung, Einweisung, Kurzinfo, Internet-Kurs, Internet-Kurse, Online-Training, Intensiv, Intensivkurs, Vortragsreihe, Präsentation, Grundzüge, Mitschrift, Mitschriften, Verständnis, verstehen, anwenden, Hintergrundwissen, Hintergrund, Hintergründe, content, Funktionsprinzip, Schritt für Schritt; E-Learning; elearning; online learning; Fernlehre, Fernlehrgang, Fernlehrgänge, Referent, Referenten, Fernkurs, Fernkurse, Fernstudium, Fernschule, Fernuniversität, Fernlehrer, Denken, Qualifizierungsmaßnahme, Qualifizierung, Qualifizierungen, Volkshochschulkurs, Volkshochschulkurse, Internet-Learning-Plattform, Online-Learning-Plattform, E-Learning-Plattform, Internetlearning-Plattform, Onlinelearning-Plattform, Elearning-Plattform, jetzt, Kochbuch, einfach erklärt, Kenntnis, Kenntniss, Kenntnisse, deutsche Hilfe, lernen und verstehen; blended learning; courseware, Profi, Profis, professionell, professionelle, professionelles, profesionell, profesionelle, profesionelles, professionel, gekonnt, für Könner, Grundkurs, Leistungskurs, Aufbaukurs, Lehrtext, Lehrtexte, Fachtext, Fachtexte, Ausarbeitung, distance learning, Online Seminar, distance education, Online Tutorium, Online Tutorien, technology-based learning, Computer based learning, CBL, Internet Based learning, IBL, Web based learning, WBL, online-learning, OL, online-training, OT, CAI, Computer Assisted Instruction, CUU, Computerunterstützter Unterricht, Computer-unterstützter Unterricht, Know how, Grundkenntnis, Grundkenntnisse, Kompetenz, Schulungsunterlagen, Insiderwissen, Rat, Lehrerinnen und Lehrer, ABC, Überblick, Arbeitsblatt, Sekundarstufe, Oberstufe, Material, Materialien, Unterrichtsentwurf, Unterrichtsentwürfe, Lerntip, Lerntips, Lerntipp, Lerntipps, ebook, schnell lernen, Lerner, Lernender, Lernende Erwachsenenbildung, Frage und Antwort, Selbststudium, Selbstudium, Umschulung, , Softwareentwicklung, Software-Entwicklung, Software Entwicklung, Softwareprogrammierung, Software-Programmierung, Software Programmierung, Softwareherstellung, Software-Herstellung, Software Herstellung, Softwareerstellung, Software-Erstellung, Software Erstellung, Softwareengineering, Software-Engineering, Software Engineering, Softwareenginering, Software-Enginering, Software Enginering, Softwaremethodik, Software-Methodik, Software Methodik, Programmiermethodik, Programmier-Methodik, Programmier Methodik, Softwaredidaktik, Software-Didaktik, Software Didaktik, Methodik des Programmierens, Didaktik des Programmierens, Fachdidaktik des Programmierens, Fach-Didaktik des Programmierens, Programmieren, Programmierung, Computer Science, Informatik, Informatik, Informationspädagogik, Informationspaedagogik, Programmierer, programmieren, Quellcode, Quelltext, Quelle, Quellen, Informatiker, Fachinformatiker, Entwickler, mit Stil, mit Stiel, mit Still, Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd720855, slrprddef720855, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/c++_zuweisung_de