ich das Video von Symbio C++ Seminar mit Herb Sutter beobachten - (Thrill of a) Lebensdauer 2016.06.20, https://www.youtube.com/watch?v=7b75rcHg7z0&t=917sLebensdauer der Zeiger
Der folgende Code wurde aus dem 11 :: 24 Video geschrieben. Die Zeiger p1, p2 und p3 müssen ungültig werden, wenn das Oszilloskop ausgeht. Es muss einen Fehler geben, wenn versucht wird, die Zeiger zu dereferenzieren.
Ich benutze online https://wandbox.org/ Umgebung. Sowohl gcc als auch clang ergeben die folgenden Ergebnisse. Was falsch sein muss.
Kann jemand den gleichen Code auf Visual Stdio überprüfen.
Dank
#include <iostream>
using namespace std;
#include <vector>
#include <memory>
#include <cstdio>
#include <cassert>
#include <string>
#include <iterator>
#include <algorithm>
#include <array>
int* p1 = nullptr; int* p2 = nullptr; int* p3 = nullptr;
int main() {
{
int i = 1;
struct MyStruct { char a; int i; char c;} s = {'a', 2, 'c'};
array<int,7> arr = {0,1,2,3,4,5,6};
p1 = &i;
p2 = &s.i;
p3 = & arr[2];
*p1 =*p2= *p3 = 42;
cout << *p1 << *p2 << *p3 << endl;
}
*p1 = 1; // This must give error
*p2 = 2;
*p3 = 3;
cout << *p1 << *p2 << *p3 << endl;
}
Dies ist die Ausgabe:
424242
123
Hm? p1, p2, p3 haben einen globalen Geltungsbereich, da sie außerhalb aller Funktionen liegen, nicht wahr? – Ctx
'nullptr' ist nicht C. –
Warum denken Sie, dass sie einen Fehler geben müssen? Ich weigere mich zu glauben, dass Herb Sutter so etwas behaupten würde. – molbdnilo