Ich habe kürzlich über die Regeln für Zeigerarithmetik in C++ nachgedacht, nachdem ich gelernt habe, dass Zeigerarithmetik nur für Zeiger definiert ist, die auf Objekte zeigen, die in einem Array existieren.C++ Iterieren eines Elements - UB oder definiertes Verhalten?
Dies führte mich zu der Frage, ob das Verhalten des folgenden Codes nach dem Standard streng undefiniert ist.
Kann jemand Licht abgeben?
#include <iostream>
#include <algorithm>
#include <iterator>
#include <utility>
#include <string>
#include <vector>
struct Thing {
std::string val;
};
int main() {
Thing a_thing;
std::vector<Thing> things;
// take address
auto first_thing = std::addressof(a_thing);
// take address of "one past the end" - UB?
auto last_thing = std::next(first_thing);
// copying exactly one item, but is it UB?
std::copy(first_thing, last_thing, std::back_inserter(things));
}
vielen dank für die schnelle antwort –