Unspezifiziertes Verhalten in C++
Wie implementationsdefiniertes Verhalten, so hängt auch unspezifiziertes Verhalten von der Implementation ab, diese muß aber unspezifiziertes Verhalten nicht dokumentieren.
Hierbei handelt es sich um interne Entscheidungen einer Implementation, die einem Programmierer eigentlich egal sein sollten. Beispielsweise um die Frage ob für zwei in einem Programm vorkommende Zeichenfolgenliterale mit dem gleichen Text (wie »"abc"« und »"abc"«) jeweils zwei verschiedene Zeichenfolgen abgespeichert werden, oder in welcher Reihenfolge die Argumente eines Aufrufs oder Operanden eines Operators ausgewertet werden.
Wird »abc« bei der Ausführung des folgenden Programms doppelt im Speicher gehalten?
main.cpp
#include <cmath> // ::std::atan, ::std::pow
#include <iostream> // ::std::cout
#include <ostream> // <<
#include <string> // ""susing namespace ::std::literals;
int main()
{ ::std::cout << ""s + "abc" + "abc" << "\n"s; }- Protokoll
abcabc
Welche der beiden Division wird bei der Ausführung des folgenden Programms zuerst ausgeführt?
main.cpp
#include <iostream> // ::std::cout
#include <ostream> // <<
#include <string> // ""susing namespace ::std::literals;
int main()
{ ::std::cout << 4/2 + 8/2 << "\n"s; }- Protokoll
6
Welche der beiden Division wird bei der Ausführung des folgenden Programms zuerst ausgeführt?
main.cpp
#include <cmath> // ::std::pow
#include <iostream> // ::std::cout
#include <ostream> // <<
#include <string> // ""susing namespace ::std::literals;
int main()
{ ::std::cout << ::std::pow( 4/2, 8/2 )<< "\n"s; }- Protokoll
16
Über all diese Frage sollte man sich keine Gedanken machen, und das beobachtbare Verhalten eines Programmes sollte nicht von ihren Antworten abhängen. Die Implementation entscheidet diese Dinge, ohne daß der Programmierer sich mit ihnen befassen muß.